Performance Agent是AliSQL提供的一种更加便捷的性能数据统计方案。通过MySQL插件的方式,实现MySQL实例内部各项性能数据的采集与统计。
Performance Agent在information_schema系统库下新增了一张内存表PERF_STATISTICS,用于统计最近一段时间的性能数据,您可以直接查询该表获取相关指标的性能数据。 实例版本如下: MySQL 8.4 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小时的性能数据。 说明 上述参数在控制台中不可见,您可通过 PERF_STATISTICS内存表的结构如下: 列名 说明 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统计信息的指标项与 表 1. EXTRA字段说明 字段 说明 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和内存使用情况,示例如下: 查询最近30秒的InnoDB读写的数据行数,示例如下: 对接性能监控平台,实现实时监控。例如使用Grafana。背景信息
前提条件
参数说明
SHOW VARIABLES LIKE '<参数名称>';查看参数的状态。表结构说明
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;
SHOW STATUS命令显示的值相同。使用方法
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)
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)
