InnoDB Monitors简介及分类
MYSQL提供一套INNODB监控机制,用于周期性(每15钞)输出INNODB运行相关状态(INNODB运行状态、表空间状态、表状态等)到mysqld服务标准错误输出。
INNODB监控机制目前主要提供如下四类监控:
- 标准监控(Standard InnoDB Monitor):监视活动事务持有的表锁、行锁;事务锁等待;线程信号量等待;文件IO请求;buffer pool统计信息;InnoDB主线程purge和change buffer merge活动。
- 锁监控(InnoDB Lock Monitor):提供额外的锁信息。
- 表空间监控(InnoDB Tablespace Monitor):显示共享表空间中的文件段以及表空间数据结构配置验证。
- 表监控(InnoDB Table Monitor):显示内部数据字典的内容。
注:INNODB标准监控和锁监控,也可以通过命令:show engine innodb status
输出到控制台。
监控内容一般输出到mysql error log里错误日志的位置:
mysql> select @@log_error;+---------------------+| @@log_error |+---------------------+| /var/log/mysqld.log |+---------------------+1 row in set (0.00 sec)
InnoDB Monitors的分类及开关方法
四类监控开启与关闭方法,一言以蔽之,主要是通过创建系统可识读的特殊表名来完成。特别地,除表空间(InnoDB Tablespace Monitor)监控和表监控(InnoDB Table Monitor)外,其他二类监控还可能通过修改系统参数来完成。基于系统表的方式和基于系统参数的方式,只要使用二者其中一种方式开启监控即可。
1. 标准监控(Standard InnoDB Monitor)
基于系统表:innodb_monitor mysql会通过检查是否存在名为innodb_monitor的数据表,来判断是否开启标准监控,并打印日志。 需要开启,则创建表;需要关闭,则删除表。
CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;DROP TABLE innodb_monitor;
基于系统参数:innodb_status_output
自mysql 5.6.16版本之后,可以通过设置系统参数(innodb_status_output)的方式开启或者关闭标准监控。set GLOBAL innodb_status_output=ON;set GLOBAL innodb_status_output=OFF;
2. 开启锁监控(InnoDB Lock Monitor)
基于系统表:innodb_lock_monitor mysql会通过检查是否存在名为innodb_lock_monitor的数据表,来判断是否开启锁监控,并打印日志。 需要开启,则创建表;需要关闭,则删除表。
CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB;DROP TABLE innodb_lock_monitor;
基于系统参数:innodb_status_output_locks
自mysql 5.6.16版本之后,可以通过设置系统参数(innodb_status_output_locks)的方式开启或者关闭标准监控。set GLOBAL innodb_status_output=ON;set GLOBAL innodb_status_output_locks=ON;set GLOBAL innodb_status_output_locks=OFF;
注:前提需要开启 innodb_status_output
3. 开启表空间监控(InnoDB Tablespace Monitor)
基于系统表:innodb_tablespace_monitor mysql会通过检查是否存在名为innodb_tablespace_monitor的数据表,来判断是否开启表空间监控,并打印日志。 需要开启,则创建表;需要关闭,则删除表。
CREATE TABLE innodb_tablespace_monitor (a INT) ENGINE=INNODB;DROP TABLE innodb_tablespace_monitor;
注:表空间监控暂不支持通过参数方式配置,并且未来会被废弃。
4. 开启表监控(InnoDB Table Monitor)
mysql会通过检查是否存在名为innodb_table_monitor的数据表,来判断是否开启表监控,并打印日志。 需要开启,则创建表;需要关闭,则删除表。
CREATE TABLE innodb_table_monitor (a INT) ENGINE=INNODB;DROP TABLE innodb_table_monitor;
注:表监控暂不支持通过参数方式配置,并且未来会被废弃。
附录
需要特别注意的一点是:mysql服务重启后,需要重启开启相应监控,才会生效。换句话说,服务重启后,之前配置的所有监控都被复位,处于关闭状态。
基于系统表方式开启的监控,在mysql服务重启后,即使表存在,监控也不会生效。需要重启drop表,再create表,才能使监控生效。
基于系统参数方式开启的监控,在mysql服务重启后,相关系统参数值都是OFF。需要重启设置对应的参数,才能使用监控生效。
参考: