パフォーマンスエージェントは、インスタンスレベルのパフォーマンスメトリクスを一定の間隔で収集し、クエリ可能なインメモリテーブル (information_schema.PERF_STATISTICS) に格納する AliSQL プラグインです。これを使用して、ライブパフォーマンスデータに対してカスタム SQL クエリを実行したり、Grafana でリアルタイムダッシュボードを構築したり、独自のモニタリングパイプラインにメトリクスを供給したりできます。
前提条件
開始する前に、ご利用のインスタンスが次のバージョン要件を満たしていることを確認してください:
マイナーエンジンバージョンが 20200229 以降の MySQL 8.0
マイナーエンジンバージョンが 20200229 以降の MySQL 5.7
マイナーエンジンバージョンが 20200630 以降の MySQL 5.6
マイナーエンジンバージョンの更新手順については、「ApsaraDB RDS for MySQL インスタンスのマイナーエンジンバージョンの更新」をご参照ください。
仕組み
パフォーマンスエージェントは、主要なパフォーマンスメトリクスのスナップショットを一定の間隔 (デフォルト:1 秒) で information_schema.PERF_STATISTICS に書き込みます。このテーブルはインメモリ構造であり、新しいエントリが到着すると古いエントリが削除されます。
デフォルト設定 (performance_agent_interval=1、performance_agent_perfstat_volume_size=3600) では、テーブルは 3,600 行を保持し、これは約 1 時間前のデータに相当します。
データ保持期間の概要
| 収集間隔 | 保持されるレコード | 保持されるデータ |
|---|---|---|
| 1 秒 (デフォルト) | 3,600 (デフォルト) | 約 1 時間 |
| 5 秒 | 3,600 (デフォルト) | 約 5 時間 |
| 10 秒 | 3,600 (デフォルト) | 約 10 時間 |
| 1 秒 | 7,200 | 約 2 時間 |
より多くの履歴を保持するには、performance_agent_perfstat_volume_size の値を増やします。これにより追加のメモリが使用されるため、ご利用のインスタンスで利用可能なリソースとのトレードオフを考慮してください。
パフォーマンスエージェントの設定
以下のパラメーターでパフォーマンスエージェントの動作を制御します。これらのパラメーターは ApsaraDB RDS コンソールには表示されません。いずれかのパラメーターの現在の値を確認するには、次のコマンドを実行します:
SHOW VARIABLES LIKE '<parameter_name>';| パラメーター | 説明 | デフォルト |
|---|---|---|
performance_agent_enabled | パフォーマンスエージェントを有効または無効にします。有効な値:ON、OFF。 | ON |
performance_agent_interval | RDS がパフォーマンススナップショットを収集する頻度です。単位:秒。間隔が短いほど、データ収集の頻度が高くなり、メモリ使用量も増加します。 | 1 |
performance_agent_perfstat_volume_size | PERF_STATISTICS テーブルの最大行数です。この制限に達すると、最も古い行が削除されます。 | 3600 |
performance_agent_file_size | ディスクに書き込まれるパフォーマンスデータファイルのサイズです。単位:MB。 | — |
performance_agent_network_device | ホストの物理ネットワークインターフェイスコントローラー (NIC) 名のプレフィックスです。 | — |
パフォーマンスデータのクエリ
すべてのクエリは information_schema.PERF_STATISTICS に対して実行されます。ORDER BY TIME DESC と LIMIT を使用して、直近 N 秒間のデータを取得します。
リソースメトリクス (CPU、メモリ、I/O)
SELECT TIME, PROCS_MEM_USAGE, PROCS_CPU_RATIO
FROM information_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;出力例:
+---------------------+-----------------+-----------------+
| TIME | PROCS_MEM_USAGE | PROCS_CPU_RATIO |
+---------------------+-----------------+-----------------+
| 2020-02-27 11:15:36 | 857812992 | 18.55 |
| 2020-02-27 11:15:35 | 857808896 | 18.54 |
| 2020-02-27 11:15:34 | 857268224 | 19.64 |
...
+---------------------+-----------------+-----------------+
30 rows in set (0.08 sec)InnoDB メトリクス
InnoDB の統計情報は、EXTRA 列に JSON オブジェクトとして格納されます。-> 演算子を使用して個々のフィールドを抽出します。
SELECT TIME,
EXTRA->'$.INNODB_ROWS_READ',
EXTRA->'$.INNODB_ROWS_INSERTED'
FROM information_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;出力例:
+---------------------+-----------------------------+---------------------------------+
| TIME | EXTRA->'$.INNODB_ROWS_READ' | EXTRA->'$.INNODB_ROWS_INSERTED' |
+---------------------+-----------------------------+---------------------------------+
| 2020-02-27 11:22:17 | 39209 | 0 |
| 2020-02-27 11:22:16 | 36098 | 0 |
...
+---------------------+-----------------------------+---------------------------------+
30 rows in set (0.08 sec)EXTRA 列の値は、SHOW STATUS によって返される値と一致します。
モニタリングプラットフォームへの接続
リアルタイムダッシュボードを利用するために、パフォーマンスエージェントをモニタリングプラットフォームに接続します。たとえば、Grafana に接続します。
PERF_STATISTICS スキーマ参照
テーブル定義
CREATE TEMPORARY TABLE `PERF_STATISTICS` (
`TIME` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`PROCS_MEM_USAGE` double NOT NULL DEFAULT '0',
`PROCS_MEM_RATIO` double NOT NULL DEFAULT '0',
`PROCS_CPU_RATIO` double NOT NULL DEFAULT '0',
`PROCS_IOPS` double NOT NULL DEFAULT '0',
`PROCS_IOPS_READ` double NOT NULL DEFAULT '0',
`PROCS_IOPS_WRITE` double NOT NULL DEFAULT '0',
`PROCS_IO_READ_BYTES` bigint NOT NULL DEFAULT '0',
`PROCS_IO_WRITE_BYTES` bigint NOT NULL DEFAULT '0',
`MYSQL_CONN_ABORT` int NOT NULL DEFAULT '0',
`MYSQL_CONN_CREATED` int NOT NULL DEFAULT '0',
`MYSQL_USER_CONN_COUNT` int NOT NULL DEFAULT '0',
`MYSQL_CONN_COUNT` int NOT NULL DEFAULT '0',
`MYSQL_CONN_RUNNING` int NOT NULL DEFAULT '0',
`MYSQL_CONNECTIONS` int NOT NULL DEFAULT '0',
`MYSQL_CONN_CACHED` int NOT NULL DEFAULT '0',
`MYSQL_LOCK_IMMEDIATE` int NOT NULL DEFAULT '0',
`MYSQL_LOCK_WAITED` int NOT NULL DEFAULT '0',
`MYSQL_QUESTIONS` int NOT NULL DEFAULT '0',
`MYSQL_COM_INSERT` int NOT NULL DEFAULT '0',
`MYSQL_COM_INSERT_SELECT` int NOT NULL DEFAULT '0',
`MYSQL_COM_REPLACE` int NOT NULL DEFAULT '0',
`MYSQL_COM_REPLACE_SELECT` int NOT NULL DEFAULT '0',
`MYSQL_COM_UPDATE` int NOT NULL DEFAULT '0',
`MYSQL_COM_UPDATE_MULTI` int NOT NULL DEFAULT '0',
`MYSQL_COM_DELETE` int NOT NULL DEFAULT '0',
`MYSQL_COM_DELETE_MULTI` int NOT NULL DEFAULT '0',
`MYSQL_COM_SELECT` int NOT NULL DEFAULT '0',
`MYSQL_COM_COMMIT` int NOT NULL DEFAULT '0',
`MYSQL_COM_ROLLBACK` int NOT NULL DEFAULT '0',
`MYSQL_COM_PREPARE` int NOT NULL DEFAULT '0',
`MYSQL_HANDLER_COMMIT` int NOT NULL DEFAULT '0',
`MYSQL_HANDELR_ROLLBACK` int NOT NULL DEFAULT '0',
`MYSQL_LONG_QUERY` int NOT NULL DEFAULT '0',
`MYSQL_TCACHE_GET` bigint NOT NULL DEFAULT '0',
`MYSQL_TCACHE_MISS` bigint NOT NULL DEFAULT '0',
`MYSQL_TMPFILE_CREATED` int NOT NULL DEFAULT '0',
`MYSQL_TMP_TABLES` int NOT NULL DEFAULT '0',
`MYSQL_TMP_DISKTABLES` int NOT NULL DEFAULT '0',
`MYSQL_SORT_MERGE` int NOT NULL DEFAULT '0',
`MYSQL_SORT_ROWS` int NOT NULL DEFAULT '0',
`MYSQL_BYTES_RECEIVED` bigint NOT NULL DEFAULT '0',
`MYSQL_BYTES_SENT` bigint NOT NULL DEFAULT '0',
`MYSQL_BINLOG_OFFSET` int NOT NULL DEFAULT '0',
`MYSQL_IOLOG_OFFSET` int NOT NULL DEFAULT '0',
`MYSQL_RELAYLOG_OFFSET` int NOT NULL DEFAULT '0',
`EXTRA` json NOT NULL DEFAULT 'null'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;列参照
リソースメトリクス
| 列 | 説明 |
|---|---|
TIME | スナップショットのタイムスタンプです。フォーマット:yyyy-MM-dd HH:mm:ss。 |
PROCS_MEM_USAGE | RDS インスタンスが使用する物理メモリです。単位:バイト。 |
PROCS_MEM_RATIO | MySQL プロセスのメモリ使用率です。 |
PROCS_CPU_RATIO | RDS インスタンスの CPU 使用率です。 |
PROCS_IOPS | I/O 操作の総数です。 |
PROCS_IOPS_READ | コンテナ内のプロセスの読み取り IOPS です。 |
PROCS_IOPS_WRITE | コンテナ内のプロセスの書き込み IOPS です。 |
PROCS_IO_READ_BYTES | I/O 操作によって読み取られたデータです。単位:バイト。 |
PROCS_IO_WRITE_BYTES | I/O 操作によって書き込まれたデータです。単位:バイト。 |
接続メトリクス
| 列 | 説明 |
|---|---|
MYSQL_CONN_ABORT | クローズされた接続の数です。 |
MYSQL_CONN_CREATED | 作成された新規接続の数です。 |
MYSQL_USER_CONN_COUNT | 接続の総数です。 |
MYSQL_CONN_COUNT | 接続の総数です。 |
MYSQL_CONN_RUNNING | アクティブ接続の数です。 |
MYSQL_CONNECTIONS | MySQL 接続の数です。 |
MYSQL_CONN_CACHED | ブロックされたスレッドの数です。 |
MYSQL_LOCK_IMMEDIATE | 保持されているロックの数です。 |
MYSQL_LOCK_WAITED | ロック待ちイベントの数です。 |
SQL 実行メトリクス
| 列 | 説明 |
|---|---|
MYSQL_QUESTIONS | クライアントから送信された SQL ステートメントの総数です。 |
MYSQL_COM_INSERT | INSERT ステートメントの数です。 |
MYSQL_COM_INSERT_SELECT | INSERT ... SELECT ステートメントの数です。 |
MYSQL_COM_REPLACE | REPLACE ステートメントの数です。 |
MYSQL_COM_REPLACE_SELECT | REPLACE ... SELECT ステートメントの数です。 |
MYSQL_COM_UPDATE | UPDATE ステートメントの数です。 |
MYSQL_COM_UPDATE_MULTI | 複数テーブルの UPDATE ステートメントの数です。 |
MYSQL_COM_DELETE | DELETE ステートメントの数です。 |
MYSQL_COM_DELETE_MULTI | 複数テーブルの DELETE ステートメントの数です。 |
MYSQL_COM_SELECT | SELECT ステートメントの数です。 |
MYSQL_COM_COMMIT | 明示的にコミットされたトランザクションの数です。 |
MYSQL_COM_ROLLBACK | ロールバックされたトランザクションの数です。 |
MYSQL_COM_PREPARE | プリペアドステートメントの数です。 |
MYSQL_HANDLER_COMMIT | COMMIT ステートメントが実行された回数です。 |
MYSQL_HANDELR_ROLLBACK | ストレージエンジンがロールバックを実行した回数です。 |
MYSQL_LONG_QUERY | スロークエリの数です。 |
MYSQL_TCACHE_GET | キャッシュヒットの数です。 |
MYSQL_TCACHE_MISS | キャッシュミスの数です。 |
MYSQL_TMPFILE_CREATED | 作成された一時ファイルの数です。 |
MYSQL_TMP_TABLES | 作成された一時テーブルの数です。 |
MYSQL_TMP_DISKTABLES | 作成された一時ディスクテーブルの数です。 |
MYSQL_SORT_MERGE | ソートマージ操作の数です。 |
MYSQL_SORT_ROWS | ソートされた行の数です。 |
MYSQL_BYTES_RECEIVED | 受信データです。単位:バイト。 |
MYSQL_BYTES_SENT | 送信データです。単位:バイト。 |
レプリケーションメトリクス
| 列 | 説明 |
|---|---|
MYSQL_BINLOG_OFFSET | 生成されたバイナリログファイルのサイズです。単位:バイト。 |
MYSQL_IOLOG_OFFSET | RDS インスタンスからそのセカンダリ RDS インスタンスに送信されたバイナリログファイルのサイズです。単位:バイト。 |
MYSQL_RELAYLOG_OFFSET | セカンダリ RDS インスタンスによって適用されたリレーログのサイズです。単位:バイト。 |
InnoDB メトリクス (EXTRA 列)
EXTRA 列には、InnoDB の統計情報を含む JSON オブジェクトが格納されます。すべての値は SHOW STATUS によって返される値と一致します。
| フィールド | 説明 |
|---|---|
INNODB_TRX_CNT | トランザクション数です。 |
INNODB_DATA_READ | 読み取られたデータです。単位:バイト。 |
INNODB_IBUF_SIZE | 挿入バッファーでマージされたページの数です。 |
INNODB_LOG_WAITS | InnoDB がログデータの書き込みを待機した回数です。 |
INNODB_MAX_PURGE | パージされたトランザクションの数です。 |
INNODB_N_WAITING | InnoDB が待機しているロックの数です。 |
INNODB_ROWS_READ | 読み取られた行数です。 |
INNODB_LOG_WRITES | InnoDB がログデータを書き込んだ回数です。 |
INNODB_IBUF_MERGES | 挿入バッファーのマージ操作の数です。 |
INNODB_DATA_WRITTEN | 書き込まれたデータです。単位:バイト。 |
INNODB_DBLWR_WRITES | doublewrite 操作の数です。 |
INNODB_IBUF_SEGSIZE | 挿入バッファーに挿入されたデータのサイズです。 |
INNODB_ROWS_DELETED | 削除された行数です。 |
INNODB_ROWS_UPDATED | 更新された行数です。 |
INNODB_COMMIT_TRXCNT | コミットされたトランザクションの数です。 |
INNODB_IBUF_FREELIST | アイドルリストの長さです。 |
INNODB_MYSQL_TRX_CNT | MySQL トランザクションの数です。 |
INNODB_ROWS_INSERTED | 挿入された行数です。 |
INNODB_ACTIVE_TRX_CNT | アクティブなトランザクションの数です。 |
INNODB_OS_LOG_WRITTEN | ディスクに書き込まれたログデータです。単位:バイト。 |
INNODB_ACTIVE_VIEW_CNT | アクティブなビューの数です。 |
INNODB_RSEG_HISTORY_LEN | TRX_RSEG_HISTORY リストの長さです。 |
INNODB_AVG_COMMIT_TRXTIME | トランザクションをコミットするための平均時間です。 |
INNODB_MAX_COMMIT_TRXTIME | トランザクションをコミットするための最大時間です。 |
INNODB_DBLWR_PAGES_WRITTEN | doublewrite 操作によって書き込まれたページの数です。 |