Performance Agent是AliSQL提供的一種更加便捷的效能資料統計方案。通過MySQL外掛程式的方式,實現MySQL執行個體內部各項效能資料的採集與統計。
背景資訊
Performance Agent在information_schema系統庫下新增了一張記憶體表PERF_STATISTICS,用於統計最近一段時間的效能資料,您可以直接查詢該表擷取相關指標的效能資料。
前提條件
執行個體版本如下:
- MySQL 8.0(核心小版本20200229或以上)
- MySQL 5.7(核心小版本20200229或以上)
- MySQL 5.6(核心小版本20200630或以上)
說明 升級核心小版本請參見升級核心小版本。
參數說明
與Performance Agent功能相關的參數說明如下。
參數 | 說明 |
performance_agent_enabled | 是否開啟Performance Agent功能。取值:ON | OFF。預設值為ON。 |
performance_agent_file_size | 本地單個效能資料檔案的大小,單位為MB。 |
performance_agent_interval | 效能資料採集間隔。單位為秒,預設值為1。 |
performance_agent_network_device | 主機物理網卡名稱首碼。 |
performance_agent_perfstat_volume_size | PERF_STATISTICS表的最巨量資料條數。預設值為3600。即當採樣間隔為1秒時,儲存最近1小時的效能資料。 |
說明 上述參數在控制台中不可見,您可通過
SHOW VARIABLES LIKE '<參數名稱>';
查看參數的狀態。表結構說明
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 | 實體記憶體使用量,單位為Byte。 |
PROCS_MEM_RATIO | 進程的記憶體佔用率。 |
PROCS_CPU_RATIO | CPU使用率。 |
PROCS_IOPS | 系統IO調用次數。 |
PROCS_IOPS_READ | 容器內進程的每秒讀IO。 |
PROCS_IOPS_WRITE | 容器內進程的每秒寫IO。 |
PROCS_IO_READ_BYTES | IO讀取資料量,單位為Byte。 |
PROCS_IO_WRITE_BYTES | IO寫入資料量,單位為Byte。 |
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 | 當前鎖等待數。 |
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 MULTI語句數。 |
MYSQL_COM_DELETE | DELETE語句數。 |
MYSQL_COM_DELETE_MULTI | DELETE MULTI語句數。 |
MYSQL_COM_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 | 接收資料量,單位為Byte。 |
MYSQL_BYTES_SENT | 發送資料量,單位為Byte。 |
MYSQL_BINLOG_OFFSET | 產生的Binlog檔案大小,單位為Byte。 |
MYSQL_IOLOG_OFFSET | 主庫發送的Binlog檔案大小,單位為Byte。 |
MYSQL_RELAYLOG_OFFSET | 從庫應用的Binlog檔案大小,單位為Byte。 |
EXTRA | InnoDB統計資訊。EXTRA包含多個欄位,為JSON格式。詳細欄位介紹請參見下方EXTRA欄位說明。 說明 InnoDB統計資訊的指標項與 SHOW STATUS 命令顯示的值相同。 |
欄位 | 說明 |
INNODB_TRX_CNT | 事務數。 |
INNODB_DATA_READ | 讀取資料量,單位為Byte。 |
INNODB_IBUF_SIZE | 合并記錄頁數。 |
INNODB_LOG_WAITS | Log寫入等待次數。 |
INNODB_MAX_PURGE | 清除事務數。 |
INNODB_N_WAITING | 鎖等待數。 |
INNODB_ROWS_READ | 讀取資料行數。 |
INNODB_LOG_WRITES | 日誌寫次數。 |
INNODB_IBUF_MERGES | 合并次數。 |
INNODB_DATA_WRITTEN | 寫入資料量,單位為Byte。 |
INNODB_DBLWR_WRITES | 雙寫操作寫入次數。 |
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 | 記錄檔寫入量,單位為Byte。 |
INNODB_ACTIVE_VIEW_CNT | 活躍視圖數。 |
INNODB_RSEG_HISTORY_LEN | TRX_RSEG_HISTORY表長度。 |
INNODB_AVG_COMMIT_TRXTIME | 平均事務提交時間。 |
INNODB_MAX_COMMIT_TRXTIME | 最長事務提交時間。 |
INNODB_DBLWR_PAGES_WRITTEN | 雙寫操作完成寫入次數。 |
使用方法
- 直接查詢系統資料表,擷取效能資料。 您可以參見如下樣本:
- 查詢最近30秒的CPU和記憶體使用量情況,樣本如下:
MySQL> 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 | | 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 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 | | 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)
- 查詢最近30秒的CPU和記憶體使用量情況,樣本如下:
- 對接效能監控平台,實現即時監控。例如使用Grafana。