• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL InnoDB Monitor

MySQL InnoDB 彭东稳 7年前 (2017-05-24) 19564次浏览 已收录 0个评论

 一、InnoDB Monitor

在MySQL处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信息,包括:锁个数、锁类型等。于是,需要能查看到更详细的事务锁占用情况。

MySQL提供一套InnoDB监控机制,用于周期性(每15钞)输出InnoDB运行相关状态(InnoDB运行状态、表空间状态、表状态等)到MySQLD服务标准错误输出。另外,InnoDB标准监控和锁监控,也可以通过命令:show engine innodb status输出到控制台,此部分内容一般输出到mysql error log里。

当你将InnoDB Monitors用于定期输出时,InnoDB将其输出写入MySQL服务器标准错误输出(stderr),在这种情况下,不会向客户端发送输出。打开InnoDB Monitors时,InnoDB会每隔15秒监控打印一次数据,服务器输出通常指向错误日志。该数据在性能调优中非常有用。

该类监控机制默认是关闭状态,分析问题需要查看监控日志时再开启。建议分析问题后,将监控关闭;否则,每15秒输出一次INNODB运行状态信息到错误日志,会使用日志变得特别大。

二、InnoDB Monitor Type

InnoDB监控机制目前主要提供如下四类监控:

  • 标准监控(Standard InnoDB Monitor):监视活动事务持有的表锁、行锁;事务锁等待;线程信号量等待;文件IO请求;buffer pool统计信息;InnoDB主线程purge和change buffer merge活动。
  • 锁监控(InnoDB Lock Monitor):提供额外的锁信息。
  • 表空间监控(InnoDB Tablespace Monitor):显示共享表空间中的文件段以及表空间数据结构配置验证。
  • 表监控(InnoDB Table Monitor):显示内部数据字典的内容。

关于四类监控开启与关闭方法,一言以蔽之,主要是通过创建系统可识读的特殊表名来完成。特别地,除表空间(InnoDB Tablespace Monitor)监控和表监控(InnoDB Table Monitor)外,其他二类监控还可能通过修改系统参数来完成。

三、Start InnoDB Monitor

基于系统表的方式和基于系统参数的方式,只要使用二者其中一种方式开启监控即可。

1. 开启标准监控(Standard InnoDB Monitor)

基于系统表:innodb_monitor

MySQL会通过检查是否存在名为innodb_monitor的数据表,来判断是否开启标准监控,并打印日志。需要开启,则创建表;需要关闭,则删除表。

基于系统参数:innodb_status_output

自MySQL 5.6.16版本之后,可以直接通过设置系统参数(innodb_status_output)的方式开启或者关闭标准监控。

2. 开启锁监控(InnoDB Lock Monitor)

基于系统表:innodb_lock_monitor

MySQL会通过检查是否存在名为innodb_lock_monitor的数据表,来判断是否开启锁监控,并打印日志。需要开启,则创建表;需要关闭,则删除表。

基于系统参数:innodb_status_output_locks

自MySQL 5.6.16版本之后,可以通过设置系统参数(innodb_status_output_locks)的方式开启或者关闭标准监控。

注:前提需要开启 innodb_status_output。

3. 开启表空间监控(InnoDB Tablespace Monitor)

基于系统表:innodb_tablespace_monitor

MySQL会通过检查是否存在名为innodb_tablespace_monitor的数据表,来判断是否开启表空间监控,并打印日志。需要开启,则创建表;需要关闭,则删除表。

注:表空间监控暂不支持通过参数方式配置,并且未来会被废弃。

4. 开启表监控(InnoDB Table Monitor)

MySQL会通过检查是否存在名为innodb_table_monitor的数据表,来判断是否开启表监控,并打印日志。需要开启,则创建表;需要关闭,则删除表。

四、InnoDB Standard Monitor and Lock Monitor Output

标准监视器与锁监视器相同,只是锁监视器包含其他锁信息。启用标准监视器进行周期性输出标准信息,但如果启用了锁监视器,则输出流会包含额外的锁信息。

标准监视器输出在使用SHOW ENGINE INNODB STATUS生成时限制为1MB 。

示例标准监视器输出:

标准监视器输出部分

有关标准监视器报告的每个度量的描述。

  • Status

本节显示时间戳,监视器名称和每秒平均值所基于的秒数;秒数是当前时间和上一次InnoDB监视器输出打印时间之间的经过时间。

  • BACKGROUND THREAD

srv_master_thread表示后台线程完成的工作。

  • SEMAPHORES

本节报告等待信号的线程, 并统计线程需要旋转多少次或mutex或rw-lock信号的等待次数。InnoDB等待信号量的大量线程可能是磁盘I/O或其中的争用问题的结果。竞争可能是由于操作系统线程调度中查询的大量并行性或问题。将innodb_thread_concurrency系统变量设置为小于默认值可能有助于优化这种情况。该Spin rounds per wait行显示每个操作系统等待互斥锁的旋转锁圈数。

  • LATEST FOREIGN KEY ERROR

本节提供有关最近的外键约束错误的信息,如果没有发生此类错误,则不存在。内容包括失败的语句以及有关失败的约束引用和引用表的信息。

  • LATEST DETECTED DEADLOCK

本节提供有关最近的死锁的信息,如果没有发生死锁,则不存在。内容显示涉及到哪些事务,每个尝试执行的声明,他们拥有和需要的锁,哪个事务决定回滚以打破僵局。

  • TRANSACTIONS

本节报告事务信息,如果此部分报告有锁等待,你的应用程序可能会遇到锁争用,输出还可以帮助跟踪事务死锁的原因。

  • FILE I/O

本节提供有关InnoDB用于执行各种类型的I/O的线程信息。内容还显示待执行I/O操作的信息和I/O性能的统计信息。这些线程的数目由控制innodb_read_io_threads和innodb_write_io_threads参数。

  • INSERT BUFFER AND ADAPTIVE HASH INDEX

本节显示InnoDB插入缓冲区(也称为更改缓冲区)和自适应散列索引的状态。有关相关信息,请参见第14.4.2节“插入缓冲区”第14.4.3节“自适应哈希索引”

  • LOG

本节显示有关InnoDB日志的信息,内容包括当前日志序列号,日志被刷新到磁盘的距离以及上次执行checkpoint的位置。该部分还显示有关待执行写入和写入性能统计信息的信息。

  • BUFFER POOL AND MEMORY

本节给出了有关读取和写入页面的统计信息(BUFFER POOL),你可以从这些数字计算你的查询当前正在执行的数据文件I/O操作数。

  • ROW OPERATIONS

本节显示主线程正在做什么,包括每种类型的行操作的数量和性能。

五、注意事宜

1. 监控复位

需要特别注意的一点是:MySQL服务重启后,需要重启开启相应监控,才会生效。换句话说,服务重启后,之前配置的所有监控都被复位,处于关闭状态。

基于系统表方式开启的监控,在MySQL服务重启后,即使表存在,监控也不会生效。需要重启drop表,再create表,才能使监控生效。

基于系统参数方式开启的监控,在MySQL服务重启后,相关系统参数值都是OFF。需要重启设置对应的参数,才能使用监控生效。

2. 错误日志大小

不在停机或重启情况下,mysql每15秒输出一次INNODB运行状态信息到错误日志。这会使用日志变得越来越大。建议在需要的时候开启,不需要的时候关闭掉。

3. 基于表方式将来会被废弃

基于表方式将来会被废弃,使用基于系统参数的方式开启。

Use INFORMATION_SCHEMA or PERFORMANCE_SCHEMA tables or SET GLOBAL innodb_status_output=ON.

4. 基于表方式无关表结构及内容

基于表方式,MySQL只检验表名被创建,则开启监控。至于,表创建到哪个数据库、表具体的数据结构、表里的内容都不关心,不会对监控开启有任何影响。

5. 日志状态输出时间

虽说状态日志是每15秒周期性输出一次,但是由于状态收集与输出也会占用一些时间,特别是表空间日志(INNODB TABLE MONITOR OUTPUT)和表日志(INNODB TABLESPACE MONITOR OUTPUT)。因此,两次日志时间并不是规律的间隔15秒,而是自上次输出后15秒加上收集输出监控日志的时间。

原文链接:https://dev.mysql.com/doc/refman/5.7/en/innodb-monitors.html


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (2)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!