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。