Performance Agent adalah plug-in PolarDB for MySQL yang menulis statistik performa tingkat node ke tabel in-memory pada interval yang dapat dikonfigurasi. Anda dapat mengkueri tabel tersebut langsung dengan SQL atau menghubungkannya ke platform pemantauan seperti Grafana untuk melacak metrik CPU, memori, I/O, koneksi, dan engine InnoDB secara real time.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster PolarDB for MySQL 8.0 dengan versi revisi 8.0.2.1.0 atau lebih baru. Untuk memeriksa versi, lihat Kueri versi engine.
Parameter
loose_performance_schemadiatur keON. Untuk memperbaruinya, lihat Tentukan parameter kluster dan node.
Cara kerja
Performance Agent mengumpulkan data performa pada interval yang dapat dikonfigurasi dan menulis setiap snapshot sebagai satu baris ke dalam tabel memori PERF_STATISTICS di database sistem performance_schema. Tabel ini menyimpan data performa yang dihasilkan selama periode waktu terbaru.
Mengaktifkan performance_schema memungkinkan Anda memantau lock, transaksi, dan metrik memori, tetapi mengonsumsi jumlah memori sistem yang signifikan dan dapat memengaruhi performa kluster. Fitur ini dinonaktifkan secara default di PolarDB for MySQL. Jika Anda mengaktifkannya, konfigurasikan hanya metrik yang diperlukan berdasarkan spesifikasi kluster dan sumber daya yang tersedia.
Parameter
| Parameter | Deskripsi | Default |
|---|---|---|
performance_agent_enabled | Mengaktifkan atau menonaktifkan Performance Agent. Nilai valid: ON, OFF. | ON |
performance_agent_interval | Frekuensi pengumpulan data oleh Performance Agent. Nilai valid: 1–60. Satuan: detik. | 1 |
performance_agent_perfstat_volume_size | Jumlah maksimum baris dalam tabel PERF_STATISTICS. | 3600 |
Dengan nilai default (interval = 1, volume_size = 3600), tabel menyimpan data selama kurang lebih satu jam.
Untuk mengubah parameter ini, lihat Tentukan parameter kluster dan node.
Tabel PERF_STATISTICS
Skema
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;Referensi kolom
Kolom dikelompokkan berdasarkan area fungsional.
Sumber daya sistem
| Kolom | Deskripsi |
|---|---|
TIME | Timestamp baris. Format: yyyy-MM-dd HH:mm:ss. |
PROCS_MEM_USAGE | Memori fisik yang digunakan oleh kluster. Satuan: byte. |
PROCS_CPU_RATIO | Utilisasi CPU. |
PROCS_IOPS | Jumlah operasi I/O yang dilakukan. |
PROCS_IO_READ_BYTES | Data yang dibaca oleh operasi I/O. Satuan: byte. |
PROCS_IO_WRITE_BYTES | Data yang ditulis oleh operasi I/O. Satuan: byte. |
Koneksi dan sesi
| Kolom | Deskripsi |
|---|---|
MYSQL_CONN_ABORT | Jumlah koneksi yang ditutup. |
MYSQL_CONN_CREATED | Jumlah koneksi baru. |
MYSQL_USER_CONN_COUNT | Total jumlah koneksi. |
MYSQL_CONN_RUNNING | Jumlah koneksi aktif. |
Lock
| Kolom | Deskripsi |
|---|---|
MYSQL_LOCK_IMMEDIATE | Jumlah lock yang dipegang. |
MYSQL_LOCK_WAITED | Jumlah event tunggu lock. |
Pernyataan SQL
| Kolom | Deskripsi |
|---|---|
MYSQL_COM_INSERT | Jumlah pernyataan INSERT yang dieksekusi. |
MYSQL_COM_UPDATE | Jumlah pernyataan UPDATE yang dieksekusi. |
MYSQL_COM_DELETE | Jumlah pernyataan DELETE yang dieksekusi. |
MYSQL_COM_SELECT | Jumlah pernyataan SELECT yang dieksekusi. |
MYSQL_COM_COMMIT | Jumlah transaksi yang dikomit secara eksplisit. |
MYSQL_COM_ROLLBACK | Jumlah transaksi yang di-rollback. |
MYSQL_COM_PREPARE | Jumlah prepared statement. |
MYSQL_LONG_QUERY | Jumlah kueri lambat. |
Cache dan objek temporary
| Kolom | Deskripsi |
|---|---|
MYSQL_TCACHE_GET | Jumlah cache hit. |
MYSQL_TCACHE_MISS | Jumlah cache miss. |
MYSQL_TMPFILE_CREATED | Jumlah file temporary yang dibuat. |
MYSQL_TMP_TABLES | Jumlah tabel temporary yang dibuat. |
MYSQL_TMP_DISKTABLES | Jumlah tabel disk temporary yang dibuat. |
Operasi sort
| Kolom | Deskripsi |
|---|---|
MYSQL_SORT_MERGE | Jumlah kali data digabung dan diurutkan. |
MYSQL_SORT_ROWS | Jumlah baris yang diurutkan. |
Jaringan dan replikasi
| Kolom | Deskripsi |
|---|---|
MYSQL_BYTES_RECEIVED | Data yang diterima oleh node. Satuan: byte. |
MYSQL_BYTES_SENT | Data yang dikirim oleh node. Satuan: byte. |
MYSQL_BINLOG_OFFSET | Ukuran file binary log yang dihasilkan. Satuan: byte. |
MYSQL_IOLOG_OFFSET | Ukuran file binary log yang dikirim oleh node primary. Satuan: byte. |
MYSQL_RELAYLOG_OFFSET | Ukuran file binary log yang diterapkan oleh node read-only. Satuan: byte. |
Engine InnoDB (kolom EXTRA)
Kolom EXTRA menyimpan statistik engine InnoDB sebagai objek JSON. Nilainya setara dengan yang dikembalikan oleh SHOW STATUS.
Gunakan ekspresi path JSON untuk mengekstrak bidang individual:
SELECT TIME, EXTRA->'$.INNODB_ROWS_READ', EXTRA->'$.INNODB_ROWS_INSERTED'
FROM performance_schema.PERF_STATISTICS
ORDER BY TIME DESC
LIMIT 30;| Bidang | Deskripsi |
|---|---|
INNODB_TRX_CNT | Jumlah transaksi. |
INNODB_DATA_READ | Data dibaca. Satuan: byte. |
INNODB_IBUF_SIZE | Jumlah halaman yang digabung. |
INNODB_LOG_WAITS | Jumlah kali InnoDB menunggu untuk menulis data log. |
INNODB_MAX_PURGE | Jumlah transaksi yang dihapus. |
INNODB_N_WAITING | Jumlah lock yang sedang ditunggu oleh InnoDB. |
INNODB_ROWS_READ | Jumlah baris yang dibaca. |
INNODB_LOG_WRITES | Jumlah kali InnoDB menulis data log. |
INNODB_IBUF_MERGES | Jumlah kali data digabung oleh InnoDB. |
INNODB_DATA_WRITTEN | Data ditulis. Satuan: byte. |
INNODB_DBLWR_WRITES | Jumlah operasi doublewrite. |
INNODB_IBUF_SEGSIZE | Ukuran data yang dimasukkan ke insert buffer. |
INNODB_ROWS_DELETED | Jumlah baris yang dihapus. |
INNODB_ROWS_UPDATED | Jumlah baris yang diperbarui. |
INNODB_COMMIT_TRXCNT | Jumlah transaksi yang dikomit. |
INNODB_IBUF_FREELIST | Panjang daftar idle. |
INNODB_MYSQL_TRX_CNT | Jumlah transaksi MySQL. |
INNODB_ROWS_INSERTED | Jumlah baris yang disisipkan. |
INNODB_ACTIVE_TRX_CNT | Jumlah transaksi aktif. |
INNODB_OS_LOG_WRITTEN | Data log yang ditulis ke disk. Satuan: byte. |
INNODB_ACTIVE_VIEW_CNT | Jumlah view aktif. |
INNODB_RSEG_HISTORY_LEN | Panjang tabel TRX_RSEG_HISTORY. |
INNODB_AVG_COMMIT_TRXTIME | Waktu rata-rata untuk melakukan commit transaksi. |
INNODB_MAX_COMMIT_TRXTIME | Waktu maksimum untuk menyelesaikan transaksi. |
INNODB_DBLWR_PAGES_WRITTEN | Jumlah halaman yang ditulis oleh operasi doublewrite. |
Contoh kueri
Semua contoh melakukan kueri terhadap performance_schema.PERF_STATISTICS dan mengurutkan hasil berdasarkan TIME DESC.
Ambil snapshot mentah
Lakukan kueri utilisasi CPU dan penggunaan memori selama 30 detik terakhir:
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)Lakukan kueri jumlah baris InnoDB yang dibaca dan disisipkan selama 30 detik terakhir:
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)Hubungkan ke platform pemantauan
Hubungkan PERF_STATISTICS ke platform pemantauan eksternal untuk memvisualisasikan metrik dari waktu ke waktu. Tangkapan layar di bawah ini menunjukkan contoh Dasbor Grafana yang terhubung ke data performa PolarDB.
