Azure Database for MySQL での低速クエリ ログ
適用対象: Azure Database for MySQL - 単一サーバー
重要
Azure Database for MySQL シングル サーバーは廃止パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、Azure Database for MySQL シングル サーバーの現状に関するページを参照してください
Azure Database for MySQL では、ユーザーは低速クエリ ログを使用できます。 トランザクション ログへのアクセスはサポートされていません。 低速クエリ ログは、トラブルシューティングの目的でパフォーマンスのボトルネックを特定するために使用できます。
MySQL の低速クエリ ログの詳細については、MySQL のリファレンス マニュアルの低速クエリ ログに関するセクションを参照してください。
サーバーでクエリ ストアが有効になっている場合、低速クエリ ログに "CALL mysql.az_procedure_collect_wait_stats (900, 30);
" のようなクエリが記録されている可能性があります。 この動作は、クエリ ストア機能によってクエリに関する統計情報を収集するために必要です。
低速クエリ ログを構成する
既定では、低速クエリ ログは無効です。 有効にするには、slow_query_log
を ON に設定します。 これは、Azure portal または Azure CLI を使用して有効にすることができます。
調整できるその他のパラメーターは次のとおりです。
- long_query_time: long_query_time (秒単位) より長いクエリがある場合は、そのクエリが記録されます。 既定値は 10 秒です。
- log_slow_admin_statements: オンの場合は、slow_query_log に書き込まれるステートメントに、ALTER_TABLE や ANALYZE_TABLE などの管理ステートメントが含まれます。
- log_queries_not_using_indexes: インデックスを使用していないクエリを slow_query_log に記録するかどうかを決定します。
- log_throttle_queries_not_using_indexes:このパラメーターは、低速クエリ ログに書き込むことができる、インデックスを使用していないクエリの数を制限します。 このパラメーターは、Log_queries_not_using_indexes がオンに設定されている場合に有効です。
- log_output: "File" の場合、ローカル サーバー ストレージと Azure Monitor 診断ログの両方に低速クエリ ログの書き込みが許可されます。 "None" の場合、低速クエリ ログは Azure Monitor 診断ログのみに書き込まれます。
重要
テーブルにインデックスが作成されていない場合は、log_queries_not_using_indexes
と log_throttle_queries_not_using_indexes
パラメーターを ON に設定すると、インデックスが設定されていないそれらのテーブルに対して実行されるすべてのクエリが低速クエリ ログに書き込まれるため、MySQL のパフォーマンスに影響する可能性があります。
低速クエリのログ記録を長時間にわたって行う場合は、log_output
を "None" に設定することをお勧めします。 "File" に設定すると、これらのログはローカル サーバー ストレージに書き込まれ、MySQL のパフォーマンスに影響を与える可能性があります。
低速クエリ ログのパラメーターの完全な説明については、MySQL の低速クエリ ログのドキュメントを参照してください。
低速クエリ ログにアクセスする
Azure Database for MySQL の低速クエリ ログにアクセスするには、ローカル サーバー ストレージまたは Azure Monitor 診断ログの 2 つのオプションがあります。 これは log_output
パラメーターを使用して設定します。
ローカル サーバー ストレージの場合は、Azure portal または Azure CLI を使用して、低速クエリ ログを一覧表示およびダウンロードできます。 Azure portal で、Azure portal 内のご使用のサーバーに移動します。 [監視] の見出しの下の、 [サーバー ログ] ページを選択します。 Azure CLI の詳細については、Azure CLI を使用した低速クエリ ログの構成とアクセスに関するページを参照してください。
Azure Monitor 診断ログを使用すると、低速クエリ ログを Azure Monitor ログ (Log Analytics)、Azure Storage、または Event Hubs にパイプすることができます。 詳細については、以下を参照してください。
ローカル サーバー ストレージ ログの保持期間
サーバーのローカル ストレージにログを記録する場合、ログは作成から最大 7 日間利用できます。 使用可能なログの合計サイズが 7 GB を超える場合、空き領域を利用できるようになるまで古いファイルから削除されます。サーバー ログの 7 GB のストレージ上限は、コストなしで使用可能であり、拡張することはできません。
ログのローテーションは、24 時間ごとか 7 GB ごとのどちらか早い方のタイミングで行われます。
Note
上記のログ保持期間は、Azure Monitor 診断ログを使用してパイプ処理されたログには適用されません。 出力先のデータ シンク (Azure Storage など) の保持期間を変更することができます。
診断ログ
Azure Database for MySQL は、Azure Monitor の診断ログと統合されます。 MySQL サーバーで低速クエリ ログを有効にしたら、Azure Monitor ログ、Event Hubs、または Azure Storage に対して、それらが出力されるように選択できます。 診断ログを有効にする方法の詳細については、診断ログのドキュメントの操作方法のセクションを参照してください。
Note
診断と設定を使用してログを Azure Storage に送信する場合、Premium Storage アカウントはサポートされません
次の表は、各ログの内容を説明しています。 出力方法に応じて、含まれるフィールドとそれらが表示される順序が異なることがあります。
プロパティ | 説明 |
---|---|
TenantId |
テナント ID |
SourceSystem |
Azure |
TimeGenerated [UTC] |
ログが記録されたときのタイムスタンプ (UTC) |
Type |
ログの種類。 常に AzureDiagnostics |
SubscriptionId |
サーバーが属するサブスクリプションの GUID |
ResourceGroup |
サーバーが属するリソース グループの名前 |
ResourceProvider |
リソース プロバイダーの名前。 常に MICROSOFT.DBFORMYSQL |
ResourceType |
Servers |
ResourceId |
リソース URI |
Resource |
サーバーの名前 |
Category |
MySqlSlowLogs |
OperationName |
LogEvent |
Logical_server_name_s |
サーバーの名前 |
start_time_t [UTC] |
クエリの開始時刻 |
query_time_s |
クエリの実行にかかった合計時間 (秒) |
lock_time_s |
クエリのロックにかかった合計時間 (秒) |
user_host_s |
ユーザー名 |
rows_sent_d |
送信された行の数 |
rows_examined_s |
検査された行の数 |
last_insert_id_s |
last_insert_id |
insert_id_s |
挿入 ID |
sql_text_s |
クエリ全体 |
server_id_s |
サーバーの ID |
thread_id_s |
スレッド ID |
\_ResourceId |
リソース URI |
注意
sql_text
の場合、2048 文字を超えたログは切り捨てられます。
Azure Monitor ログのログを分析する
低速クエリ ログが診断ログによって Azure Monitor ログにパイプされたら、低速クエリの詳細な分析を実行できます。 使用を開始する際に役立つサンプル クエリを以下にいくつか示します。 以下を、お使いのサーバー名で更新してください。
特定のサーバーで 10 秒を超えるクエリ
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | where query_time_d > 10
特定のサーバーの長いクエリの上位 5 つを一覧表示する
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | order by query_time_d desc | take 5
低速クエリを、特定のサーバーのクエリ時間の最小値、最大値、平均値、および標準偏差で要約する
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by LogicalServerName_s
特定のサーバーの低速クエリの分布をグラフ化する
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m) | render timechart
診断ログが有効になっているすべての MySQL サーバーで 10 秒以上のクエリを表示する
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s | where query_time_d > 10