Performance Agent

更新时间:
复制为 MD 格式

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

背景信息

Performance Agentinformation_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小时的性能数据。

说明

上述参数在控制台中不可见,您可通过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命令显示的值相同。

表 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