Performance Agent は、設定可能な間隔でノードレベルのパフォーマンス統計をインメモリテーブルに書き込む PolarDB for MySQL プラグインです。SQL でテーブルを直接クエリするか、Grafana のようなモニタリングプラットフォームに接続して、CPU、メモリ、I/O、接続数、InnoDB ストレージエンジンのメトリックをリアルタイムで追跡できます。
前提条件
開始する前に、以下を確認してください。
リビジョンバージョン 8.0.2.1.0 以降の PolarDB for MySQL 8.0 クラスター。バージョンを確認するには、「エンジンバージョンのクエリ」をご参照ください。
loose_performance_schemaパラメーターがONに設定されていること。更新するには、「クラスターおよびノードパラメーターの指定」をご参照ください。
仕組み
Performance Agent は、設定可能な間隔でパフォーマンスデータを収集し、各スナップショットを行として performance_schema システムデータベースの PERF_STATISTICS メモリテーブルに書き込みます。このテーブルには、最新の期間に生成されたパフォーマンスデータが保存されます。
performance_schema を有効にすると、ロック、トランザクション数、およびメモリメトリックをモニターできますが、大量のシステムメモリを消費し、クラスターパフォーマンスに影響を与える可能性があります。PolarDB for MySQL ではデフォルトで無効になっています。有効にする場合は、クラスターの仕様と利用可能なリソースに基づいて、必要なメトリックのみを設定してください。
パラメーター
| パラメーター | 説明 | デフォルト |
|---|---|---|
performance_agent_enabled | Performance Agent を有効または無効にします。有効な値: ON、OFF。 | ON |
performance_agent_interval | Performance Agent がデータを収集する頻度。有効な値: 1~60。単位: 秒。 | 1 |
performance_agent_perfstat_volume_size | PERF_STATISTICS テーブルの最大行数。 | 3600 |
デフォルト値 (interval = 1、volume_size = 3600) の場合、テーブルは約1時間分のデータを保持します。
これらのパラメーターを変更するには、「クラスターおよびノードパラメーターの指定」をご参照ください。
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_CPU_RATIO` double NOT NULL DEFAULT '0',
`PROCS_IOPS` double NOT NULL DEFAULT '0',
`PROCS_IO_READ_BYTES` bigint(21) NOT NULL DEFAULT '0',
`PROCS_IO_WRITE_BYTES` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_CONN_ABORT` int(11) NOT NULL DEFAULT '0',
`MYSQL_CONN_CREATED` int(11) NOT NULL DEFAULT '0',
`MYSQL_USER_CONN_COUNT` int(11) NOT NULL DEFAULT '0',
`MYSQL_CONN_RUNNING` int(11) NOT NULL DEFAULT '0',
`MYSQL_LOCK_IMMEDIATE` int(11) NOT NULL DEFAULT '0',
`MYSQL_LOCK_WAITED` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_INSERT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_UPDATE` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_DELETE` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_SELECT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_COMMIT` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_ROLLBACK` int(11) NOT NULL DEFAULT '0',
`MYSQL_COM_PREPARE` int(11) NOT NULL DEFAULT '0',
`MYSQL_LONG_QUERY` int(11) NOT NULL DEFAULT '0',
`MYSQL_TCACHE_GET` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_TCACHE_MISS` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_TMPFILE_CREATED` int(11) NOT NULL DEFAULT '0',
`MYSQL_TMP_TABLES` int(11) NOT NULL DEFAULT '0',
`MYSQL_TMP_DISKTABLES` int(11) NOT NULL DEFAULT '0',
`MYSQL_SORT_MERGE` int(11) NOT NULL DEFAULT '0',
`MYSQL_SORT_ROWS` int(11) NOT NULL DEFAULT '0',
`MYSQL_BYTES_RECEIVED` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_BYTES_SENT` bigint(21) NOT NULL DEFAULT '0',
`MYSQL_BINLOG_OFFSET` int(11) NOT NULL DEFAULT '0',
`MYSQL_IOLOG_OFFSET` int(11) NOT NULL DEFAULT '0',
`MYSQL_RELAYLOG_OFFSET` int(11) 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 | クラスターが使用する物理メモリ。単位: バイト。 |
PROCS_CPU_RATIO | CPU 使用率。 |
PROCS_IOPS | 実行された I/O 操作の数。 |
PROCS_IO_READ_BYTES | I/O 操作によって読み取られたデータ。単位: バイト。 |
PROCS_IO_WRITE_BYTES | I/O 操作によって書き込まれたデータ。単位: バイト。 |
接続とセッション
| カラム | 説明 |
|---|---|
MYSQL_CONN_ABORT | クローズされた接続の数。 |
MYSQL_CONN_CREATED | 新規接続の数。 |
MYSQL_USER_CONN_COUNT | 接続の総数。 |
MYSQL_CONN_RUNNING | アクティブ接続の数。 |
ロック
| カラム | 説明 |
|---|---|
MYSQL_LOCK_IMMEDIATE | 保持されているロックの数。 |
MYSQL_LOCK_WAITED | ロック待ちイベントの数。 |
SQL ステートメント
| カラム | 説明 |
|---|---|
MYSQL_COM_INSERT | 実行された INSERT ステートメントの数。 |
MYSQL_COM_UPDATE | 実行された UPDATE ステートメントの数。 |
MYSQL_COM_DELETE | 実行された DELETE ステートメントの数。 |
MYSQL_COM_SELECT | 実行された SELECT ステートメントの数。 |
MYSQL_COM_COMMIT | 明示的にコミットされたトランザクションの数。 |
MYSQL_COM_ROLLBACK | ロールバックされたトランザクションの数。 |
MYSQL_COM_PREPARE | 準備されたステートメントの数。 |
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 | プライマリノードによって送信されたバイナリログファイルのサイズ。単位: バイト。 |
MYSQL_RELAYLOG_OFFSET | 読み取り専用ノードによって適用されたバイナリログファイルのサイズ。単位: バイト。 |
InnoDB ストレージエンジン (EXTRA カラム)
EXTRA カラムは、InnoDB ストレージエンジンの統計を JSON オブジェクトとして保存します。値は SHOW STATUS によって返される値と同等です。
個々のフィールドを抽出するには、JSON パス式を使用します。
SELECT TIME, EXTRA->'$.INNODB_ROWS_READ', EXTRA->'$.INNODB_ROWS_INSERTED'
FROM performance_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;| フィールド | 説明 |
|---|---|
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 によってデータがマージされた回数。 |
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 操作によって書き込まれたページ数。 |
クエリ例
すべての例では、performance_schema.PERF_STATISTICS にクエリを実行し、TIME DESC で結果を並べ替えます。
生のスナップショットの取得
過去 30 秒間の CPU 使用率とメモリ使用量を照会します。
MySQL> SELECT TIME, PROCS_MEM_USAGE, PROCS_CPU_RATIO
FROM performance_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 |
| 2020-02-27 11:15:33 | 857268224 | 21.06 |
| 2020-02-27 11:15:32 | 857264128 | 20.39 |
| 2020-02-27 11:15:31 | 857272320 | 20.32 |
| 2020-02-27 11:15:30 | 857272320 | 21.35 |
| 2020-02-27 11:15:29 | 857272320 | 28.8 |
| 2020-02-27 11:15:28 | 857268224 | 29.08 |
| 2020-02-27 11:15:27 | 857268224 | 26.92 |
| 2020-02-27 11:15:26 | 857268224 | 23.84 |
| 2020-02-27 11:15:25 | 857264128 | 13.76 |
| 2020-02-27 11:15:24 | 857264128 | 15.12 |
| 2020-02-27 11:15:23 | 857264128 | 14.76 |
| 2020-02-27 11:15:22 | 857264128 | 15.38 |
| 2020-02-27 11:15:21 | 857260032 | 13.23 |
| 2020-02-27 11:15:20 | 857260032 | 12.75 |
| 2020-02-27 11:15:19 | 857260032 | 12.17 |
| 2020-02-27 11:15:18 | 857255936 | 13.22 |
| 2020-02-27 11:15:17 | 857255936 | 20.51 |
| 2020-02-27 11:15:16 | 857255936 | 28.74 |
| 2020-02-27 11:15:15 | 857251840 | 29.85 |
| 2020-02-27 11:15:14 | 857251840 | 29.31 |
| 2020-02-27 11:15:13 | 856981504 | 28.85 |
| 2020-02-27 11:15:12 | 856981504 | 29.19 |
| 2020-02-27 11:15:11 | 856977408 | 29.12 |
| 2020-02-27 11:15:10 | 856977408 | 29.32 |
| 2020-02-27 11:15:09 | 856977408 | 29.2 |
| 2020-02-27 11:15:08 | 856973312 | 29.36 |
| 2020-02-27 11:15:07 | 856973312 | 28.79 |
+---------------------+-----------------+-----------------+
30 rows in set (0.08 sec)過去 30 秒間に読み取られ、挿入された InnoDB の行を照会します。
MySQL> SELECT TIME, EXTRA->'$.INNODB_ROWS_READ', EXTRA->'$.INNODB_ROWS_INSERTED'
FROM performance_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 |
| 2020-02-27 11:22:15 | 38035 | 0 |
| 2020-02-27 11:22:14 | 37384 | 0 |
| 2020-02-27 11:22:13 | 38336 | 0 |
| 2020-02-27 11:22:12 | 33946 | 0 |
| 2020-02-27 11:22:11 | 36301 | 0 |
| 2020-02-27 11:22:10 | 36835 | 0 |
| 2020-02-27 11:22:09 | 36900 | 0 |
| 2020-02-27 11:22:08 | 36402 | 0 |
| 2020-02-27 11:22:07 | 39672 | 0 |
| 2020-02-27 11:22:06 | 39316 | 0 |
| 2020-02-27 11:22:05 | 37830 | 0 |
| 2020-02-27 11:22:04 | 36396 | 0 |
| 2020-02-27 11:22:03 | 34820 | 0 |
| 2020-02-27 11:22:02 | 37350 | 0 |
| 2020-02-27 11:22:01 | 39463 | 0 |
| 2020-02-27 11:22:00 | 38419 | 0 |
| 2020-02-27 11:21:59 | 37673 | 0 |
| 2020-02-27 11:21:58 | 35117 | 0 |
| 2020-02-27 11:21:57 | 36140 | 0 |
| 2020-02-27 11:21:56 | 37592 | 0 |
| 2020-02-27 11:21:55 | 39765 | 0 |
| 2020-02-27 11:21:54 | 35553 | 0 |
| 2020-02-27 11:21:53 | 35882 | 0 |
| 2020-02-27 11:21:52 | 37061 | 0 |
| 2020-02-27 11:21:51 | 40699 | 0 |
| 2020-02-27 11:21:50 | 39608 | 0 |
| 2020-02-27 11:21:49 | 39317 | 0 |
| 2020-02-27 11:21:48 | 37413 | 0 |
+---------------------+-----------------------------+---------------------------------+
30 rows in set (0.08 sec)モニタリングプラットフォームへの接続
PERF_STATISTICS を外部モニタリングプラットフォームに接続して、メトリックを時系列で可視化します。以下のスクリーンショットは、PolarDB のパフォーマンスデータに接続された Grafana ダッシュボードの例を示しています。
