クエリ ストアを使用した Azure Database for MySQL のパフォーマンスの監視Monitor Azure Database for MySQL performance with Query Store

適用対象: Azure Database for MySQL 5.7、8.0Applies to: Azure Database for MySQL 5.7, 8.0

Azure Database for MySQL のクエリ ストア機能を使用すると、クエリ パフォーマンスを経時的に追跡できます。The Query Store feature in Azure Database for MySQL provides a way to track query performance over time. クエリ ストアを使用すると、実行時間が最長のクエリおよびリソースを最も消費しているクエリを迅速に特定できるので、パフォーマンスのトラブルシューティングが簡単になります。Query Store simplifies performance troubleshooting by helping you quickly find the longest running and most resource-intensive queries. クエリ ストアでは、クエリおよびランタイム統計の履歴が自動的にキャプチャされて保持されるので、それらを確認できます。Query Store automatically captures a history of queries and runtime statistics, and it retains them for your review. データベースの使用パターンを確認できるように、データが時間枠で区切られます。It separates data by time windows so that you can see database usage patterns. すべてのユーザー、データベース、クエリに関するデータが、Azure Database for MySQL インスタンス内の mysql スキーマ データベースに格納されます。Data for all users, databases, and queries is stored in the mysql schema database in the Azure Database for MySQL instance.

クエリ ストアを使用する一般的なシナリオCommon scenarios for using Query Store

クエリ ストアは、次のようなさまざまなシナリオで使用できます。Query store can be used in a number of scenarios, including the following:

  • 低速になったクエリを検出するDetecting regressed queries
  • 指定された時間枠内にクエリが実行された回数を確認するDetermining the number of times a query was executed in a given time window
  • 大きなデルタを確認するために時間枠間でクエリの平均実行回数を比較するComparing the average execution time of a query across time windows to see large deltas

クエリ ストアの有効化Enabling Query Store

クエリ ストアはオプトイン機能なので、既定ではサーバー上でアクティブになりません。Query Store is an opt-in feature, so it isn't active by default on a server. クエリ ストアは特定のサーバー上のすべてのデータベースに対してグローバルに有効または無効になり、データベースごとに有効または無効にすることはできません。The query store is enabled or disabled globally for all the databases on a given server and cannot be turned on or off per database.

Azure portal を使用してクエリ ストアを有効にするEnable Query Store using the Azure portal

  1. Azure portal にサインインし、ご利用の Azure Database for MySQL サーバーを選択します。Sign in to the Azure portal and select your Azure Database for MySQL server.
  2. メニューの [設定] セクションで、 [サーバー パラメーター] を選択します。Select Server Parameters in the Settings section of the menu.
  3. query_store_capture_mode パラメーターを検索します。Search for the query_store_capture_mode parameter.
  4. 値を ALL に設定し、保存 します。Set the value to ALL and Save.

クエリ ストアでの待機統計を有効にするには、次の手順に従います。To enable wait statistics in your Query Store:

  1. query_store_wait_sampling_capture_mode パラメーターを検索します。Search for the query_store_wait_sampling_capture_mode parameter.
  2. 値を ALL に設定し、保存 します。Set the value to ALL and Save.

mysql データベース内にデータの最初のバッチが保持されるまで最大 20 分かかります。Allow up to 20 minutes for the first batch of data to persist in the mysql database.

クエリ ストア内の情報Information in Query Store

クエリ ストアには、次の 2 つのストアがあります。Query Store has two stores:

  • クエリ実行の統計情報を保持するためのランタイム統計ストア。A runtime statistics store for persisting the query execution statistics information.
  • 待機統計情報を保持するための待機統計ストア。A wait statistics store for persisting wait statistics information.

使用領域を最小限に抑えるために、ランタイム統計ストア内のランタイム実行統計は、構成可能な固定時間枠で集計されます。To minimize space usage, the runtime execution statistics in the runtime statistics store are aggregated over a fixed, configurable time window. これらのストア内の情報は、クエリ ストアのビューに対してクエリを実行することで表示できます。The information in these stores is visible by querying the query store views.

次のクエリでは、クエリ ストア内のクエリに関する情報が返されます。The following query returns information about queries in Query Store:

SELECT * FROM mysql.query_store;

また、このクエリは待機統計情報に関するものです。Or this query for wait statistics:

SELECT * FROM mysql.query_store_wait_stats;

待機クエリの検索Finding wait queries

注意

待機統計は、ワークロード時間のピーク時に有効にしたり、機密性の高いワークロードに対して無期限に有効にしたりしないでください。Wait statistics should not be enabled during peak workload hours or be turned on indefinitely for sensitive workloads.
CPU 使用率が高い状態で実行されているワークロードや、低い仮想コアで構成されているサーバーで実行されているワークロードの場合は、待機統計を有効にするときに注意が必要です。For workloads running with high CPU utilization or on servers configured with lower vCores, use caution when enabling wait statistics. 無期限には有効にしないでください。It should not be turned on indefinitely.

待機イベントの種類では、類似性によってさまざまな待機イベントがバケットに結合されます。Wait event types combine different wait events into buckets by similarity. クエリ ストアでは、待機イベントの種類、特定の待機イベント名、対象のクエリが提供されます。Query Store provides the wait event type, specific wait event name, and the query in question. この待機情報をクエリのランタイム統計に関連付けられることは、クエリのパフォーマンス特性に何が寄与しているかをより深く理解できることを意味します。Being able to correlate this wait information with the query runtime statistics means you can gain a deeper understanding of what contributes to query performance characteristics.

クエリ ストア内の待機統計を使用してワークロードの詳細な分析情報を得る方法の例を次にいくつか示します。Here are some examples of how you can gain more insights into your workload using the wait statistics in Query Store:

観測Observation 操作Action
ロック待機が長いHigh Lock waits 影響を受けているクエリのクエリ テキストを確認し、ターゲット エンティティを識別します。Check the query texts for the affected queries and identify the target entities. 同じエンティティを変更する他のクエリのクエリ ストアで、頻繁に実行されているクエリ、実行時間が長いクエリ、あるいはその両方を探します。Look in Query Store for other queries modifying the same entity, which is executed frequently and/or have high duration. これらのクエリを特定した後で、コンカレンシーを向上させるためにアプリケーション ロジックを変更するか、より制限の低い分離レベルを使用します。After identifying these queries, consider changing the application logic to improve concurrency, or use a less restrictive isolation level.
バッファー IO 待機が長いHigh Buffer IO waits クエリ ストア内で物理読み取り回数が多いクエリを検索します。Find the queries with a high number of physical reads in Query Store. それらと IO 待機が長いクエリが一致する場合は、スキャンではなくシークを実行するために、基になるエンティティへのインデックスの導入を検討します。If they match the queries with high IO waits, consider introducing an index on the underlying entity, to do seeks instead of scans. これにより、クエリの IO オーバーヘッドが最小限に抑えられます。This would minimize the IO overhead of the queries. ポータル上でサーバーの [パフォーマンスの推奨事項] を調べて、このサーバーに対してクエリを最適化するインデックスの推奨事項があるかどうかを確認します。Check the Performance Recommendations for your server in the portal to see if there are index recommendations for this server that would optimize the queries.
メモリ待機が多いHigh Memory waits クエリ ストア内で、メモリを最も消費しているクエリを探します。Find the top memory consuming queries in Query Store. おそらくこれらのクエリによって、影響を受けているクエリの進行がさらに遅れています。These queries are probably delaying further progress of the affected queries. ポータル上でサーバーの [パフォーマンスの推奨事項] を調べて、これらのクエリを最適化するインデックスの推奨事項があるかどうかを確認します。Check the Performance Recommendations for your server in the portal to see if there are index recommendations that would optimize these queries.

構成オプションConfiguration options

クエリ ストアが有効になっている場合、データは 15 分間の集計ウィンドウで保存され、ウィンドウあたり最大 500 件の個別のクエリが保存されます。When Query Store is enabled it saves data in 15-minute aggregation windows, up to 500 distinct queries per window.

次のオプションは、クエリ ストア パラメーターを構成するために使用できます。The following options are available for configuring Query Store parameters.

パラメーターParameter 説明Description [Default]Default RangeRange
query_store_capture_modequery_store_capture_mode この値に基づいて、クエリ ストア機能をオンまたはオフにします。Turn the query store feature ON/OFF based on the value. 注:performance_schema がオフの場合、query_store_capture_mode をオンにすると、この機能に必要な performance_schema とパフォーマンス スキーマ インストルメントのサブセットが有効になります。Note: If performance_schema is OFF, turning on query_store_capture_mode will turn on performance_schema and a subset of performance schema instruments required for this feature. ALLALL NONE、ALLNONE, ALL
query_store_capture_intervalquery_store_capture_interval クエリ ストアのキャプチャ間隔 (分単位)。The query store capture interval in minutes. クエリ メトリックを集計する間隔を指定できます。Allows specifying the interval in which the query metrics are aggregated 1515 5 から 605 - 60
query_store_capture_utility_queriesquery_store_capture_utility_queries システム内で実行されているすべてのユーティリティ クエリのキャプチャをオンまたはオフにします。Turning ON or OFF to capture all the utility queries that is executing in the system. NONO YES、NOYES, NO
query_store_retention_period_in_daysquery_store_retention_period_in_days クエリ ストア内にデータを保持する時間枠 (日数)。Time window in days to retain the data in the query store. 77 1 - 301 - 30

待機統計には次のオプションが適用されます。The following options apply specifically to wait statistics.

パラメーターParameter 説明Description [Default]Default RangeRange
query_store_wait_sampling_capture_modequery_store_wait_sampling_capture_mode 待機統計をオンまたはオフにすることができます。Allows turning ON / OFF the wait statistics. NONENONE NONE、ALLNONE, ALL
query_store_wait_sampling_frequencyquery_store_wait_sampling_frequency 待機サンプリングの頻度を秒単位で変更します。Alters frequency of wait-sampling in seconds. 5 から 300 秒です。5 to 300 seconds. 3030 5 から 3005-300

注意

現時点では、query_store_capture_mode がこの構成よりも優先されます。そのため、待機統計を機能させるには、query_store_capture_modequery_store_wait_sampling_capture_mode の両方を ALL に設定して有効にする必要があります。Currently query_store_capture_mode supersedes this configuration, meaning both query_store_capture_mode and query_store_wait_sampling_capture_mode have to be enabled to ALL for wait statistics to work. 待機統計では、有効になっている performance_schema と、クエリ ストアによってキャプチャされた query_text を利用するため、query_store_capture_mode がオフになっている場合、待機統計もオフになります。If query_store_capture_mode is turned off, then wait statistics is turned off as well since wait statistics utilizes the performance_schema enabled, and the query_text captured by query store.

パラメーターに対して別の値を取得または設定するには Azure portal または Azure CLI を使用します。Use the Azure portal or Azure CLI to get or set a different value for a parameter.

ビューと関数Views and functions

次のビューと関数を使用してクエリ ストアを表示および管理します。View and manage Query Store using the following views and functions. select privilege public ロールに属するユーザーは、これらのビューを使用してクエリ ストア内のデータを表示できます。Anyone in the select privilege public role can use these views to see the data in Query Store. これらのビューは、mysql データベース内でのみ使用できます。These views are only available in the mysql database.

クエリは、リテラルと定数を削除した後、その構造を調べることで正規化されます。Queries are normalized by looking at their structure after removing literals and constants. 2 つのクエリがリテラル値を除いて同一の場合、それらは同じハッシュを持ちます。If two queries are identical except for literal values, they will have the same hash.

mysql.query_storemysql.query_store

このビューでは、クエリ ストア内のすべてのデータが返されます。This view returns all the data in Query Store. 個別のデータベース ID、ユーザー ID、クエリ ID ごとに 1 つの行があります。There is one row for each distinct database ID, user ID, and query ID.

名前Name [データ型]Data Type IS_NULLABLEIS_NULLABLE 説明Description
schema_name varchar(64)varchar(64) NONO スキーマの名前Name of the schema
query_id bigint(20)bigint(20) NONO 特定のクエリに対して生成される一意の ID。同じクエリが異なるスキーマで実行されると、新しい ID が生成されます。Unique ID generated for the specific query, if the same query executes in different schema, a new ID will be generated
timestamp_id timestamptimestamp NONO クエリが実行されたタイムスタンプ。Timestamp in which the query is executed. これは、query_store_interval の構成に基づきます。This is based on the query_store_interval configuration
query_digest_text longtextlongtext NONO すべてのリテラルを削除した後の正規化されたクエリ テキストThe normalized query text after removing all the literals
query_sample_text longtextlongtext NONO リテラルを含む実際のクエリの最初の出現First appearance of the actual query with literals
query_digest_truncated bitbit YESYES クエリ テキストが切り詰められたかどうか。Whether the query text has been truncated. クエリが 1 KB を超えると、値は Yes になります。Value will be Yes if the query is longer than 1 KB
execution_count bigint(20)bigint(20) NONO このタイムスタンプ ID で、または構成済みの間隔中にクエリが実行された回数The number of times the query got executed for this timestamp ID / during the configured interval period
warning_count bigint(20)bigint(20) NONO この間隔中に、このクエリによって生成された警告の数Number of warnings this query generated during the internal
error_count bigint(20)bigint(20) NONO この間隔中に、このクエリによって生成されたエラーの数Number of errors this query generated during the interval
sum_timer_wait doubledouble YESYES この間隔中のこのクエリの合計実行時間Total execution time of this query during the interval
avg_timer_wait doubledouble YESYES この間隔中のこのクエリの平均実行時間Average execution time for this query during the interval
min_timer_wait doubledouble YESYES このクエリの最小実行時間Minimum execution time for this query
max_timer_wait doubledouble YESYES 最大実行時間Maximum execution time
sum_lock_time bigint(20)bigint(20) NONO この時間枠内に、このクエリ実行のすべてのロックに費やされた合計時間Total amount of time spent for all the locks for this query execution during this time window
sum_rows_affected bigint(20)bigint(20) NONO 影響を受ける行の数Number of rows affected
sum_rows_sent bigint(20)bigint(20) NONO クライアントに送信された行の数Number of rows sent to client
sum_rows_examined bigint(20)bigint(20) NONO 検査された行の数Number of rows examined
sum_select_full_join bigint(20)bigint(20) NONO 完全結合の数Number of full joins
sum_select_scan bigint(20)bigint(20) NONO 選択スキャンの数Number of select scans
sum_sort_rows bigint(20)bigint(20) NONO 並べ替えられた行の数Number of rows sorted
sum_no_index_used bigint(20)bigint(20) NONO クエリでインデックスが使用されなかった回数Number of times when the query did not use any indexes
sum_no_good_index_used bigint(20)bigint(20) NONO クエリ実行エンジンが有効なインデックスを使用しなかった回数Number of times when the query execution engine did not use any good indexes
sum_created_tmp_tables bigint(20)bigint(20) NONO 作成された一時テーブルの総数Total number of temp tables created
sum_created_tmp_disk_tables bigint(20)bigint(20) NONO ディスク内に作成された一時テーブルの総数 (I/O を生成)Total number of temp tables created in disk (generates I/O)
first_seen timestamptimestamp NONO 集計期間でのクエリの最初の発生 (UTC)The first occurrence (UTC) of the query during the aggregation window
last_seen timestamptimestamp NONO 集計期間でのクエリの最後の発生 (UTC)The last occurrence (UTC) of the query during this aggregation window

mysql.query_store_wait_statsmysql.query_store_wait_stats

このビューでは、クエリ ストア内の待機イベント データが返されます。This view returns wait events data in Query Store. 個別のデータベース ID、ユーザー ID、クエリ ID、イベントごとに 1 つの行があります。There is one row for each distinct database ID, user ID, query ID, and event.

名前Name [データ型]Data Type IS_NULLABLEIS_NULLABLE 説明Description
interval_start timestamptimestamp NONO 間隔の開始 (15 分単位)Start of the interval (15-minute increment)
interval_end timestamptimestamp NONO 間隔の終了 (15 分単位)End of the interval (15-minute increment)
query_id bigint(20)bigint(20) NONO 正規化されたクエリに対して生成された一意のID (クエリ ストアから)Generated unique ID on the normalized query (from query store)
query_digest_id varchar(32)varchar(32) NONO すべてのリテラルを削除した後の正規化されたクエリ テキスト (クエリ ストアから)The normalized query text after removing all the literals (from query store)
query_digest_text longtextlongtext NONO リテラルを含む実際のクエリの最初の出現 (クエリ ストアから)First appearance of the actual query with literals (from query store)
event_type varchar(32)varchar(32) NONO 待機イベントのカテゴリCategory of the wait event
event_name varchar(128)varchar(128) NONO 待機イベントの名前Name of the wait event
count_star bigint(20)bigint(20) NONO クエリの間隔中にサンプリングされた待機イベントの数Number of wait events sampled during the interval for the query
sum_timer_wait_ms doubledouble NONO この間隔中のこのクエリの合計待機時間 (ミリ秒単位)Total wait time (in milliseconds) of this query during the interval

関数Functions

名前Name 説明Description
mysql.az_purge_querystore_data(TIMESTAMP) 指定されたタイム スタンプより前のクエリ ストア データをすべて消去しますPurges all query store data before the given time stamp
mysql.az_procedure_purge_querystore_event(TIMESTAMP) 指定されたタイム スタンプより前の待機イベント データをすべて消去しますPurges all wait event data before the given time stamp
mysql.az_procedure_purge_recommendation(TIMESTAMP) 有効期限が指定されたタイム スタンプより前の推奨事項を消去しますPurges recommendations whose expiration is before the given time stamp

制限事項と既知の問題Limitations and known issues

  • MySQL サーバーの default_transaction_read_only パラメーターがオンの場合、クエリ ストアはデータをキャプチャできません。If a MySQL server has the parameter default_transaction_read_only on, Query Store cannot capture data.
  • 時間がかかる Unicode クエリ (>= 6000 バイト) が発生した場合は、クエリ ストア機能の実行が中断されることがあります。Query Store functionality can be interrupted if it encounters long Unicode queries (>= 6000 bytes).
  • 待機統計の保持期間は 24 時間です。The retention period for wait statistics is 24 hours.
  • 待機統計では、サンプリングを使用してイベントの一部をキャプチャします。Wait statistics uses sample to capture a fraction of events. query_store_wait_sampling_frequency パラメーターを使用して頻度を変更できます。The frequency can be modified using the parameter query_store_wait_sampling_frequency.

次のステップNext steps