OneSQL :: 利用OneAgent插件,输出更多InnoDB事务引挚层的详细性能数据。

除了用OneAgent来方便地查询主机负载信息文件系统空间使用情况外,平民软件发现通过“show status like ‘innodb%’”输出的InnoDB引挚层性能数据十分有限,通过“show engine innodb status”命令可以看到部份“show status”命令看不到的性能数据,当然也还有一部份非常有用的指标没有输出,平民软件通过OneAgent插件对OneSQL中InnoDB层的监控信息做了增强,可以查看到部份“trx_sys”结构和“log_sys”结构相关的指标(这两个结构需要了解部份MySQL源代码才能理解)。

在OneSQL(目前需要下载“5.6.30”版本)中运行“show status like ‘oneagent_innodb%’”命令,可以看到OneAgent中用来监控和了解InnoDB运行的性能指标(下面的数据从sysbench压测中抓取)。

mysql> show status like 'oneagent_innodb%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| oneagent_innodb_dataread   | 0        |
| oneagent_innodb_datawrite  | 12756992 |
| oneagent_innodb_lockelap   | 2        |
| oneagent_innodb_locksess   | 0        |
| oneagent_innodb_locktime   | 0        |
| oneagent_innodb_lockwait   | 2        |
| oneagent_innodb_log        | 4833747  |
| oneagent_innodb_logckpt    | 35595408 |
| oneagent_innodb_logflush   | 10813    |
| oneagent_innodb_logwait    | 0        |
| oneagent_innodb_logwrite   | 1861     |
| oneagent_innodb_pagecreate | 0        |
| oneagent_innodb_pageflush  | 213      |
| oneagent_innodb_pageread   | 213      |
| oneagent_innodb_pagewait   | 0        |
| oneagent_innodb_pagewrite  | 213      |
| oneagent_innodb_rowdel     | 3926     |
| oneagent_innodb_rowins     | 3929     |
| oneagent_innodb_rowsel     | 1647634  |
| oneagent_innodb_rowupd     | 11783    |
| oneagent_innodb_trx        | 7855     |
| oneagent_innodb_trxlist    | 30       |
| oneagent_innodb_trxlong    | 0        |
| oneagent_innodb_trxpurge   | 7840     |
| oneagent_innodb_trxrseg    | 347      |
| oneagent_innodb_trxtime    | 0        |
| oneagent_innodb_trxview    | 30       |
+----------------------------+----------+
27 rows in set (0.00 sec)

输出的是两次运行间隔(由“oneagent_internval”变量控制,默认值是一秒)之间的差量值,直接使用数据即可,不再需要额外做计算。先重点来看一下“oneagent_innodb_trx”开头的各个变量值的含义:

  • oneagent_innodb_trx,InnoDB层启动的内部事务数,包括查询引起的事务数。
  • oneagent_innodb_trxlist,InnoDB层当前活动的事务数,取自“rw_trx_list”链表的长度。
  • oneagent_innodb_trxrseg,未被清理的回滚段数量,持续增大表示purge进程来不及清理。
  • oneagent_innodb_trxview,InnoDB层当前活动的快照数量,取自“view_list”链表的长度。
  • oneagent_innodb_trxtime,当前活越会话中,最长的事务的持续时间。
  • oneagent_innodb_trxlong,事务持续时间超过3秒(“oneproxy_longtran”)的会话数。
  • oneagent_innodb_trxpurge,InnoDB层清理的事务个数。

上面的这几个值在目前的社区版本上都无法查询到。再来看一下“oneagent_innodb_log”开头的各个变量值的含义:

  • oneagent_innodb_log,InnoDB日志生成量,取自“log_sys”的“lsn”值,两个点相减。
  • oneagent_innodb_logckpt,InnoDB日志中未完成Checkpoint的日志量。
  • oneagent_innodb_logflush,InnoDB日志中未同步刷出到到磁盘上的日志量。
  • oneagent_innodb_logwait,日志缓存满而等待日志刷出的次数,反映日志IO的情况。
  • oneagent_innodb_logwrite,InnoDB层日志IO的次数。

在MySQL锁的层面也有几个非常有价值的性能指标输出。

  • oneagent_innodb_locktime,当前活越事务中,最长的锁等待时间。
  • oneagent_innodb_locksess,当前活越事务中,处于锁等待状态的会话个数。

在最上面的输出中,“oneagent_innodb_pagewat”表示因为找不到空闲的Data Buffer而等待的次数,其他的状态变量值可以根据名称去猜测一下,比较易懂。非常欢迎大家提出更多有意义的指标,好让平民软件续持完善OneAgent监控插件。