Performance Agent是AliSQL提供的一种更加便捷的性能数据统计方案。通过MySQL插件的方式,实现MySQL实例内部各项性能数据的采集与统计。

背景信息

Performance Agent在information_schema系统库下新增了一张内存表PERF_STATISTICS,用于统计最近一段时间的性能数据,您可以直接查询该表获取相关指标的性能数据。

前提条件

  • 实例版本如下:
    • MySQL 8.0
    • MySQL 5.7
  • 内核小版本为20200229或以上。
    说明 升级内核小版本请参见升级内核小版本

参数说明

与Performance Agent功能相关的参数说明如下。

参数 说明
performance_agent_enabled 是否开启Performance Agent功能。取值:ON | OFF。默认值为ON。
performance_agent_interval 性能数据采集间隔。单位为秒,默认值为1。
performance_agent_perfstat_volume_size PERF_STATISTICS表的最大数据条数。默认值为3600。即当采样间隔为1秒时,保存最近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 物理内存使用量,单位为Byte。
PROCS_CPU_RATIO CPU使用率。
PROCS_IOPS 系统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_RUNNING 当前活跃连接数。
MYSQL_LOCK_IMMEDIATE 当前锁占用数。
MYSQL_LOCK_WAITED 当前锁等待数。
MYSQL_COM_INSERT 插入语句数。
MYSQL_COM_UPDATE 更新语句数。
MYSQL_COM_DELETE 删除语句数。
MYSQL_COM_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 接收数据量,单位为Byte。
MYSQL_BYTES_SENT 发送数据量,单位为Byte。
MYSQL_BINLOG_OFFSET 产生的Binlog文件大小,单位为Byte。
MYSQL_IOLOG_OFFSET 主库发送的Binlog文件大小,单位为Byte。
MYSQL_RELAYLOG_OFFSET 从库应用的Binlog文件大小,单位为Byte。
EXTRA InnoDB统计信息。EXTRA包含多个字段,为JSON格式。详细字段介绍请参见下方表 1
说明 InnoDB统计信息的指标项与SHOW STATUS命令显示的值相同。
表 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和内存使用情况,示例如下:
      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)
  • 对接性能监控平台,实现实时监控。例如使用GrafanaGrafana