このトピックでは、Performance Insight機能を使用して、ApsaraDBインスタンスのワークロードを監視し、関連付け分析を実行し、パフォーマンスを最適化する方法について説明します。 この機能は、RDSインスタンスのワークロードを迅速に評価し、パフォーマンスの問題を特定してサービスの安定性を確保するのに役立ちます。
前提条件
- RDSインスタンスは、次のいずれかのMySQLバージョンを実行します。
- MySQL 8.0
- MySQL 5.7
- RDSインスタンスのマイナーエンジンバージョンが20190915以降です。 説明 RDSインスタンスのマイナーエンジンバージョンを表示するには、ApsaraDB RDSコンソールにログインし、[基本情報] ページに移動します。 ページの [構成情報] セクションで、[カーネルバージョンのアップグレード] ボタンが表示されているかどうかを確認できます。 ボタンが表示されている場合は、ボタンをクリックして、RDSインスタンスのマイナーエンジンバージョンを表示および更新できます。 ボタンが表示されない場合、RDSインスタンスは最新のマイナーエンジンバージョンを実行します。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
概要
パフォーマンスインサイト機能は、次の2つの部分で構成されます。
- オブジェクト統計 Object Statisticsは、インデックスと次のテーブルから統計を照会します。
- TABLE_STATISTICS: 読み取りデータと変更データを含む行を記録します。
- INDEX_STATISTICS: インデックスから読み取ったデータを含む行を記録します。
- パフォーマンスポイント パフォーマンスポイントは、RDSインスタンスのパフォーマンスの詳細を収集します。 これらの詳細を使用して、SQL文のオーバーヘッドを迅速かつ正確に定量化できます。 パフォーマンスポイントは、次の3つの要素からデータベースのパフォーマンスを測定します。
- CPU: SQLステートメントの実行に費やされた合計時間と、SQLステートメントの実行に費やされた時間が含まれます。
- ロック: サーバー上のメタデータロック、ストレージトランザクションロック、デバッグモードのみの相互除外、リーダー /ライターロックなどのロックが占有する時間が含まれます。
- I/O: データファイルの読み取りと書き込み、ログファイルの書き込み、バイナリログの読み取り、redoログの読み取り、redoログの非同期読み取りなどの操作を実行するのにかかる時間が含まれます。
オブジェクト統計の使用
- OPT_TABLESTATおよびOPT_INDEXSTATパラメーターの値がONであることを確認します。 例:
mysql> "opt _%_ stat" のような変数を表示します。 +---------------+-------+ | Variable_name | Value | +---------------+-------+ | opt_indexstat | ON | | opt_tablestat | ON | +---------------+-------+
- information_schemaデータベースのTABLE_STATISTICSテーブルまたはINDEX_STATISTICSテーブルを照会して、テーブル統計またはインデックス統計を取得します。 例:
mysql> select * from TABLE_STATISTICS limit 10; +--------------+--------------+-----------+--------------+------------------------+---------------+--------------+--------------+ | TABLE_SCHEMA | TABLE_NAME | ROWS_READ | ROWS_CHANGED_X_INDEXES | ROWS_INSERTED | ROWS_DELETED | ROWS_UPDATED | +--------------+--------------+-----------+--------------+------------------------+---------------+--------------+--------------+ | mysql | db | 2 | 0 | 0 | 0 | 0 | 0 | | mysql | engine_cost | 2 | 0 | 0 | 0 | 0 | 0 | | mysql | proxies_priv | 1 | 0 | 0 | 0 | 0 | 0 | | mysql | server_cost | 6 | 0 | 0 | 0 | 0 | 0 | | mysql | tables_priv | 2 | 0 | 0 | 0 | 0 | 0 | | mysql | ユーザー | 7 | 0 | 0 | 0 | 0 | 0 | | test | sbtest1 | 1686 | 142 | 184 | 112 | 12 | 18 | | test | sbtest10 | 1806 | 125 | 150 | 105 | 5 | 15 | | test | sbtest100 | 1623 | 141 | 182 | 110 | 10 | 21 | | test | sbtest11 | 1254 | 136 | 172 | 110 | 10 | 16 | +--------------+--------------+-----------+--------------+------------------------+---------------+--------------+--------------+ mysql> select * from INDEX_STATISTICS limit 10; +--------------+--------------+------------+-----------+ | TABLE_SCHEMA | TABLE_NAME | INDEX_NAME | ROWS_READ | +--------------+--------------+------------+-----------+ | mysql | db | PRIMARY | 2 | | mysql | engine_cost | PRIMARY | 2 | | mysql | proxies_priv | PRIMARY | 1 | | mysql | server_cost | PRIMARY | 6 | | mysql | tables_priv | PRIMARY | 2 | | mysql | ユーザー | PRIMARY | 7 | | test | sbtest1 | PRIMARY | 2500 | | test | sbtest10 | PRIMARY | 3007 | | test | sbtest100 | PRIMARY | 2642 | | test | sbtest11 | PRIMARY | 2091 | +--------------+--------------+------------+-----------+
次の表に、前述の例のパラメーターを示します。
パラメーター 説明 テーブル_スキーマ データベースの名前。 TABLE_NAME テーブルの名前。 ROWS_READ テーブルから読み取られた行の数。 ROWS_CHANGED テーブルで変更された行数。 ROWS_CHANGED_X_インデックス テーブル内のインデックスを使用して変更された行数。 ROWS_挿入 テーブルに挿入された行の数。 ROWS_DELETED テーブルから削除された行の数。 ROWS_更新 テーブルで更新された行数。 INDEX_NAME インデックスの名前。
パフォーマンスポイントの使用
- RDSインスタンスのグローバル変数設定を表示します。
mysql> "% performance_point %" のような変数を表示します。 +---------------------------------------+-------+ | Variable_name | 値 | +---------------------------------------+-------+ | performance_point_dbug_enabled | オフ | | performance_point_enabled | ON | | performance_point_iostat_interval | 2 | | performance_point_iostat_volume_size | 10000 | | performance_point_lock_rwlock_enabled | オン | +---------------------------------------+-------+
説明 これらの変数が見つからない場合は、RDSインスタンスが前提条件セクションに記載されているバージョン要件を満たしているかどうかを確認してください。 - performance_schemaデータベースのevents_statements_summary_by_digest_supplementテーブルを照会して、さまざまなディメンションの上位10個のSQL文を取得します。 例:
mysql> select * from events_statements_summary_by_digest_supplement limit 10; +--------------------+----------------------------------+-------------------------------------------+--------------+ | SCHEMA_NAME | DIGEST | DIGEST_TEXT | ELAPSED_TIME | ...... +--------------------+----------------------------------+-------------------------------------------+--------------+ | NULL | 6b787dd1f9c6f6c5033120760a1a82de | SELECT @ @ 'version_comment' LIMIT? | 932 | | NULL | 2fb4341654df6995113d998c52e5abc9 | ショースキーマ | 2363 | | NULL | 8a93e76a7846384621567fb4daa1bf95 | SHOW VARIABLES LIKE? | 17933 | | NULL | dd148234ac7a20cb5aee7720fb44b7ea | SELECT SCHEMA ( ) | 1006 | | information_schema | 2fb4341654df6995113d998c52e5abc9 | SHOW SCHEMAS | 2156 | | information_schema | 74af182f3a2bd265678d3dadb53e08da | ショーテーブル | 3161 | | information_schema | d3a66515192fcb100aaef6f8b6e45603 | SELECT * FROM 'TABLE_STATISTS 'LIMIT? | 2081 | | information_schema | b3726b7c4c4db4b309de2dbc45ff52af | SELECT * FROM 'INDEX_STATISTS 'LIMIT? | 2384 | | information_schema | dd148234ac7a20cb5aee7720fb44b7ea | SELECT SCHEMA ( ) | 129 | | test | 2fb4341654df6995113d998c52e5abc9 | ショースキーマ | 342 | +--------------------+----------------------------------+-------------------------------------------+--------------+
次の表に、前述の例のパラメーターを示します。
パラメーター 説明 スキーマ_名前 データベースの名前。 ダイジェスト DIGEST_TEXTパラメーターから取得した64バイトのハッシュ文字列。 DIGEST_TEXT SQL文のダイジェスト。 ELAPSED_TIME SQL文の実行に費やされた合計時間。 単位:マイクロ秒。 CPU_時間 CPUがSQL文を実行するのに費やした時間。 単位:マイクロ秒。 SERVER_LOCK_TIME SQL文の実行中にサーバー上でメタデータロックが占める時間。 単位:マイクロ秒。 TRANSACTION_LOCK_TIME SQL文の実行中にストレージトランザクションがロックする時間。 単位:マイクロ秒。 MUTEX_スピン SQL文の実行中にトリガーされたミューテックススピンの数。 MUTEX_WAITS SQL文の実行中にミューテックスによってトリガーされるスピン待機の数。 RWLOCK_SPIN_WAITS SQL文の実行中にリーダー書き込みロックによってトリガーされるスピン待機の数。 RWLOCK_SPIN_ROUNDS SQL文の実行中にリーダー書き込みロックによってトリガーされたスピン待機サイクルでバックグラウンドスレッドがループしたラウンドの数。 RWLOCK_OS_WAITS SQL文の実行中にリーダー書き込みロックによってトリガーされるオペレーティングシステムの待機数。 DATA_READS SQL文の実行中にシステムがデータファイルからデータを読み取った回数。 DATA_READ_TIME SQL文の実行中にデータファイルからデータを読み取るのに費やされた時間。 単位:マイクロ秒。 DATA_WRITES SQL文の実行中にシステムがデータファイルにデータを書き込んだ回数。 DATA_WRITE_TIME SQL文の実行中にデータファイルにデータを書き込むのに費やされた時間。 単位:マイクロ秒。 REDO_書き込み SQL文の実行中にシステムがログファイルにデータを書き込んだ回数。 REDO_WRITE_TIME SQL文の実行中にログファイルにデータを書き込むのに費やされた時間。 単位:マイクロ秒。 LOGICAL_READS SQL文の実行中にシステムが論理ページを読み取った回数。 PHYSICAL_READS SQL文の実行中にシステムが物理ページを読み取った回数。 PHYSICAL_ASYNC_リード SQL文の実行中にシステムが物理非同期ページを読み取った回数。 - information_schemaデータベースのIO_STATISTICSテーブルを照会して、最近のデータの読み取りおよび書き込み操作に関する情報を取得します。例:
mysql> select * from IO_STATISTICS limit 10; +---------------------+-----------+----------------+ | タイム | DATA_READ | DATA_READ_TIME |... +---------------------+-----------+----------------+ | 2019-08-08 09:56:53 | 73 | 983 | | 2019-08-08 09:56:57 | 0 | 0 | | 2019-08-08 09:59:17 | 0 | 0 | | 2019-08-08 10:00:55 | 4072 | 40628 | | 2019-08-08 10:00:59 | 0 | 0 | | 2019-08-08 10:01:09 | 562 | 5800 | | 2019-08-08 10:01:11 | 606 | 6910 | | 2019-08-08 10:01:13 | 609 | 6875 | | 2019-08-08 10:01:15 | 625 | 7077 | | 2019-08-08 10:01:17 | 616 | 5800 | +---------------------+-----------+----------------+
次の表に、前述の例のパラメーターを示します。
パラメーター 説明 タイム 日付。 DATA_READ システムがデータを読み取った回数。 DATA_READ_TIME データの読み取りに費やされた合計時間。 単位:マイクロ秒。 DATA_READ_MAX_TIME データの読み取りに費やされた最大時間。 単位:マイクロ秒。 DATA_READ_BYTES 読み取られたデータの合計量。 単位:バイト DATA_WRITE システムがデータを書き込んだ回数。 DATA_WRITE_TIME データの書き込みに費やされた合計時間。 単位:マイクロ秒。 DATA_WRITE_MAX_TIME データの書き込みに費やされた最大時間。 単位:マイクロ秒。 DATA_WRITE_BYTES 書き込まれたデータの総量。 単位:バイト