Azure Database for MySQL - フレキシブル サーバーの低速クエリ ログ
Azure Database for MySQL フレキシブル サーバーでは、ユーザーは低速クエリ ログを構成してアクセスできます。 低速クエリ ログは既定で無効にされていますが、トラブルシューティング時に、パフォーマンスのボトルネックの特定で役立てるために有効にすることができます。
MySQL の低速クエリ ログの詳細については、MySQL エンジンのドキュメントの低速クエリ ログに関するセクションを参照してください。
低速クエリ ログを構成する
既定で、低速クエリ ログは無効です。 ログを有効にするには、slow_query_log
サーバー パラメーターを ON に設定します。 これは、Azure portal または Azure CLI を使用して構成できます。
低速クエリ ログの動作を制御するために調整できるその他のパラメーターには、次のようなものがあります。
- long_query_time: クエリが完了までに
long_query_time
(秒) よりも長くかかる場合に、ログに記録します。 既定は 10 秒です。 サーバー パラメーターlong_query_time
は、MySQL に新しく確立されたすべての接続にグローバルに適用されます。 ただし、既に接続されているスレッドには影響しません。 アプリケーションから Azure Database for MySQL フレキシブル サーバーに再接続することをお勧めします。または、サーバーを再起動すると、"long_query_time" の古い値を持つスレッドをクリアし、更新されたパラメーター値を適用するのに役立ちます。 - log_slow_admin_statements: 管理ステートメント (例:
ALTER_TABLE
、ANALYZE_TABLE
) がログに記録されるか判断します。 - log_queries_not_using_indexes: インデックスを使用していないクエリをログに記録するかどうかを特定します。
- log_throttle_queries_not_using_indexes: 低速クエリ ログに書き込むことができる、インデックスを使用していないクエリの数を制限します。 このパラメーターは
log_queries_not_using_indexes
が ON に設定されている場合に有効になります
重要
テーブルにインデックスが作成されていない場合、log_queries_not_using_indexes
パラメーターと log_throttle_queries_not_using_indexes
パラメーターを ON に設定すると、これらのインデックスが設定されていないテーブルに対して実行されるすべてのクエリが低速クエリ ログに書き込まれるため、MySQL のパフォーマンスに影響する可能性があります。
低速クエリ ログのパラメーターの完全な説明については、MySQL の低速クエリ ログのドキュメントを参照してください。
低速クエリ ログにアクセスする
低速クエリ ログは、Azure Monitor 診断設定と統合されています。 Azure Database for MySQL フレキシブル サーバー インスタンスで低速クエリ ログを有効にしたら、それらを Azure Monitor ログ、Event Hubs、または Azure Storage に出力できます。 診断設定の詳細については、診断ログのドキュメントを参照してください。 Azure portal で診断設定を有効にする方法の詳細については、低速クエリ ログに関するポータルの記事を参照してください。
注意
診断と設定を経由して 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_s |
送信された行の数 |
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_s
の場合、2048 文字を超えたログは切り捨てられます。
Azure Monitor ログのログを分析する
低速クエリ ログが診断ログによって Azure Monitor ログにパイプされたら、低速クエリの詳細な分析を実行できます。 使用を開始する際に役立つサンプル クエリを以下にいくつか示します。 以下を、お使いのサーバー名で更新してください。
特定のサーバーで 10 秒を超えるクエリ
AzureDiagnostics | where Resource == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s | where query_time_d > 10
特定のサーバーの長いクエリの上位 5 つを一覧表示する
AzureDiagnostics | where Resource == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s | order by query_time_d desc | take 5
低速クエリを、特定のサーバーのクエリ時間の最小値、最大値、平均値、および標準偏差で要約する
AzureDiagnostics | where Resource == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, Resource , event_class_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 Resource
特定のサーバーの低速クエリの分布をグラフ化する
AzureDiagnostics | where Resource == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s | summarize count() by Resource , bin(TimeGenerated, 5m) | render timechart
診断ログが有効になっているすべての Azure Database for MySQL フレキシブル サーバー インスタンスで 10 秒以上のクエリを表示する
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s | where query_time_d > 10