Azure Database for MariaDB での低速クエリ ログ
重要
Azure Database for MariaDB は、提供終了予定です。 Azure Database for MySQL に移行することを強くお勧めします。 Azure Database for MySQL への移行の詳細については、「Azure Database for MariaDB の現状」を参照してください
Azure Database for MariaDB では、ユーザーは低速クエリ ログを使用できます。 トランザクション ログへのアクセスはサポートされていません。 低速クエリ ログは、トラブルシューティングの目的でパフォーマンスのボトルネックを特定するために使用できます。
低速クエリ ログについて詳しくは、低速クエリ ログに関する MariaDB のドキュメントをご覧ください。
サーバーでクエリ ストアが有効になっている場合、低速クエリ ログに "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 に設定すると、インデックスが設定されていないテーブルに対して実行されるすべてのクエリが低速クエリ ログに書き込まれるため、MariaDB のパフォーマンスに影響する可能性があります。
低速クエリのログ記録を長時間にわたって行う場合は、log_output
を "None" に設定することをお勧めします。 "File" に設定すると、これらのログはローカル サーバー ストレージに書き込まれ、MariaDB のパフォーマンスに影響を与える可能性があります。
低速クエリ ログのパラメーターの完全な説明については、MariaDB の低速クエリ ログのドキュメントを参照してください。
低速クエリ ログにアクセスする
Azure Database for MariaDB の低速クエリ ログにアクセスするには、ローカル サーバー ストレージまたは Azure Monitor 診断ログの 2 つのオプションがあります。 これは log_output
パラメーターを使用して設定します。
ローカル サーバー ストレージの場合は、Azure portal または Azure CLI を使用して、低速クエリ ログを一覧表示およびダウンロードできます。 Azure portal で、Azure portal 内のご使用のサーバーに移動します。 [監視] の見出しの下の、 [サーバー ログ] ページを選択します。 Azure CLI の詳細については、「Configure and access server logs using 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 MariaDB は、Azure Monitor 診断ログと統合されます。 MariaDB サーバーで低速クエリ ログを有効にした場合、それらが Azure Monitor のログ、イベント ハブ、または Azure Storage に出力されるようにすることもできます。 診断ログを有効にする方法の詳細については、診断ログのドキュメントの操作方法のセクションを参照してください。
次の表は、各ログの内容を説明しています。 出力方法に応じて、含まれるフィールドとそれらが表示される順序が異なることがあります。
プロパティ | 説明 |
---|---|
TenantId |
テナント ID |
SourceSystem |
Azure |
TimeGenerated [UTC] |
ログが記録されたときのタイムスタンプ (UTC) |
Type |
ログの種類。 常に AzureDiagnostics |
SubscriptionId |
サーバーが属するサブスクリプションの GUID |
ResourceGroup |
サーバーが属するリソース グループの名前 |
ResourceProvider |
リソース プロバイダーの名前。 常に MICROSOFT.DBFORMARIADB |
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
の場合、2048 文字を超えたログは切り捨てられます。
Azure Monitor ログのログを分析する
低速クエリ ログが診断ログによって Azure Monitor ログにパイプされたら、低速クエリの詳細な分析を実行できます。 使用を開始する際に役立つサンプル クエリを以下にいくつか示します。 以下を、お使いのサーバー名で更新してください。
特定のサーバーで 10 秒を超えるクエリ
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, event_class_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, event_class_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, 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 LogicalServerName_s
特定のサーバーの低速クエリの分布をグラフ化する
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m) | render timechart
診断ログが有効になっているすべての MariaDB サーバーで 10 秒以上のクエリを表示する
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s | where query_time_d > 10