クラスターが 1 分間に何千もの類似したクエリ (フィルター値や ID のみが異なる) を実行する場合、それらを個別に分析することは非現実的です。SQL パターンは、構造的に同一のステートメントを単一のビューにグループ化することで、次のような問いに答えることができます。
どのクエリパターンが最も多くの CPU またはメモリを消費しているか。
クエリパターンのパフォーマンスは時間とともに変化したか。
クラスターに高負荷がかかっているときに、どのパターンが最も頻繁に実行されるか。
クエリパターンはどのくらいの頻度で失敗するか。
リソース使用率が 30% を超えるパターンは自動的にハイライトされます。過剰なワークロードを引き起こす SQL ステートメントはインターセプトできます。詳細については、「実行計画の永続化とクエリブロッカー」をご参照ください。
仕組み
AnalyticDB for MySQL は、リアルタイムの SQL ステートメントを分析し、SQL テキストの構造に基づいてグループ化します。フィルター条件や ID 値などのリテラル値のみが異なるステートメントは、1 つのパターンにマージされます。たとえば、次の 2 つのクエリは、WHERE 句のリテラル値のみが異なるため、同じパターンに属します。
SELECT * FROM orders WHERE user_id = 1001
SELECT * FROM orders WHERE user_id = 2048パターンビューでは、グループ内のすべてのステートメントにわたる実行回数、CPU コスト、メモリ、持続時間、スキャンされたデータが集計されます。
注意事項
SQL パターンは、過去 14 日間のみ利用可能です。
各クエリは、最大 24 時間の時間範囲をカバーします。
SQL パターンの表示
AnalyticDB for MySQL コンソールにログインします。左上のコーナーでリージョンを選択します。左側のナビゲーションウィンドウで、[クラスター] をクリックします。[Data Warehouse Edition] タブで、対象のクラスターを見つけてその ID をクリックします。
左側のナビゲーションウィンドウで、[診断と最適化] をクリックします。
[SQL パターン] タブをクリックします。
デフォルトでは、過去 30 分間のパターンが表示されます。必要に応じて、キーワードまたは時間範囲でフィルターします。
SQL パターンリストのパラメーター
| パラメーター | 説明 |
|---|---|
| 操作 | [詳細の表示] をクリックして、このパターンのパターン分析ページを開きます。 |
| ユーザー名 | このパターンの SQL ステートメントを送信するために使用されたデータベースアカウント。 |
| クライアント IP アドレス | SQL ステートメントを送信したクライアントの IP アドレス。 |
| SQL パターン | パターンを代表する SQL ステートメント。 |
| 合計 CPU コスト | 時間範囲内にこのパターンのすべてのステートメントによって消費された合計 CPU 時間。パーセンテージは、すべてのパターンの CPU 時間に占めるこのパターンの割合を示します。30% を超える値はハイライトされます。このパターンの CPU パーセンテージが高い場合は、[CPU メトリック] を確認してさらに分析してください。 |
| 合計ピークメモリ | 時間範囲内にこのパターンのすべてのステートメントによって消費された合計ピークメモリ。パーセンテージは、すべてのパターンのピークメモリに占めるこのパターンの割合を示します。30% を超える値はハイライトされます。このパターンのメモリパーセンテージが高い場合は、[コンピュートメモリ使用量メトリック] を確認してさらに分析してください。 |
| 合計持続時間 | 時間範囲内にこのパターンのすべてのステートメントの合計実行時間。パーセンテージは、すべてのパターンの合計持続時間に占めるこのパターンの割合を示します。30% を超える値はハイライトされます。このパターンの持続時間のパーセンテージが上昇している場合は、[クエリ応答時間メトリック] を確認して相関関係を調べます。 |
| 読み取りデータ合計サイズ | 時間範囲内にこのパターンのすべてのステートメントによって読み取られたデータの合計サイズ。パーセンテージは、すべてのパターンの読み取りデータに占めるこのパターンの割合を示します。30% を超える値はハイライトされます。このパターンが不釣り合いな量のデータを読み取る場合は、[テーブルデータ読み取りメトリック] を確認してさらに分析してください。 |
| データ読み取り合計コスト | このパターン内のすべての文が期間中にデータを読み取るために費やした CPU 時間の合計です。パーセンテージは、このパターンがすべてのパターンのデータ読み取り CPU 時間に占める割合を示します。30% を超える値はハイライト表示されます。値が高いと、予約ノード(ストレージノード)の CPU 使用率が上昇します。詳細な分析については、予約ノードの CPU メトリックまたは元のストレージノードを確認してください。 |
| 平均 CPU コスト | 時間範囲内の実行あたりの平均 CPU 時間。 |
| 最大 CPU コスト | 時間範囲内の単一実行の最大 CPU 時間。 |
| テーブル読み取りの平均 CPU コスト | 時間範囲内の実行あたりにデータ読み取りに費やされた平均 CPU 時間。 |
| テーブル読み取りの最大 CPU コスト | 時間範囲内の単一実行でデータ読み取りに費やされた最大 CPU 時間。 |
| 実行回数 | 時間範囲内にこのパターンのステートメントが実行された回数。この列で並べ替えると、クラスターリソースのバースト中に頻繁に実行されるパターンを特定できます。 |
| 失敗回数 | 時間範囲内の失敗した実行の回数。 |
| 消費された合計時間の平均 | 実行あたりの平均合計時間。単位:ミリ秒。 |
| 消費された合計時間の最大 | 単一実行の最大合計時間。単位:ミリ秒。通常運用時に [消費された合計時間の最大] が [消費された合計時間の平均] に近い場合、合計時間の急増は、このパターン自体ではなく、他のパターンからのリソース競合が原因である可能性が高いです。 |
| 平均実行時間 | 時間範囲内のステートメントあたりの平均実行時間。単位:ミリ秒。 |
| 最大実行時間 | 時間範囲内の単一ステートメントの最大実行時間。単位:ミリ秒。詳細については、「クエリモニタリングチャートと SQL クエリの使用」をご参照ください。 |
| 平均ピークメモリ | 時間範囲内の実行あたりの平均ピークメモリ。単位:バイト。 |
| 最大ピークメモリ | 時間範囲内の単一実行の最大ピークメモリ。単位:バイト。[最大ピークメモリ] が [平均ピークメモリ] よりもはるかに高い場合、パターンによってスキャンされるデータが増加したか、実行計画が変更された可能性があります。[詳細の表示] をクリックして原因を特定します。 |
| スキャンされたデータの平均 | 時間範囲内の実行あたりにスキャンされたデータの平均量。単位:MB。 |
| スキャン対象の最大データ量 | 時間範囲内の単一実行でスキャンされた最大データ量。単位:MB。[スキャンされたデータの最大] が [スキャンされたデータの平均] よりもはるかに高い場合、スキャンされるデータは不安定です。パターンがクラスターのパフォーマンスに影響を与える前に原因を特定してください。 |
| テーブル名 | このパターンのステートメントによってスキャンされたテーブルの名前。 |
パターンの分析
[SQL パターン] タブで、[操作] 列の [詳細の表示] をクリックして、[パターン分析] ページを開きます。このページには、選択した時間範囲内のパターンの主要なメトリック (実行回数、消費された合計時間、実行時間、スキャンされたデータ、ピークメモリなど) が時系列チャートで表示されます。各メトリックについて、最大値と平均値の両方が表示され、典型的な実行と外れ値の実行を区別するのに役立ちます。
このページには、時間範囲内にこのパターンに属するすべての個別の SQL ステートメントもリストされます。[操作] 列の [診断] をクリックして、特定のステートメントの診断結果と実行計画を表示します。詳細については、「実行計画を使用したクエリの分析」をご参照ください。