CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;
#MySQL5.6.16后的推荐方法:
#set GLOBAL innodb_status_output=ON/OFF;
#关闭服务器下次重启后该变量恢复OFF默认值
监控的结果并不会记录到这个表中,而是将相关的信息打印到err日志里,每隔15秒产生一次输出

如果想监控更多的关于innodb的锁信息还可更进一步的建立表,这样在日志中会加入更多的锁信息
create table innodb_lock_monitor (i int) engine=innodb
#MySQL5.6.16后的推荐方法:
#set GLOBAL innodb_status_output=ON;
#set GLOBAL innodb_status_output_locks=ON;
#关闭服务器下次重启后该变量恢复OFF默认值
#需要注意的是,通过该方式开启Lock Monitor必须首先set GLOBAL innodb_status_output=ON;而要关闭Lock Monitor仅set GLOBAL innodb_status_output_locks=OFF即可,要是set GLOBAL innodb_status_output=OFF;也会关闭Standard监控

只需要在任意库创建这两个表就可以监控整个实例
如果要关闭监控只要简单的删除这两个表就可以了
开启会造成性能开销,仅在必要时开启,结束后需要关闭监控
若开启后服务器重启,则不会继续监控,需要删表后重建
表结构不重要,匹配的是名字和InnoDB引擎

1 对 “mysql的innodb_monitor监控”的想法;

  1. 现在你知道了,InnoDB 会在后台刷脏页,而刷脏页的过程是要将内存页写入磁盘。所以,无论是你的查询语句在需要内存的时候可能要求淘汰一个脏页,还是由于刷脏页的逻辑会占用 IO 资源并可能影响到了你的更新语句,都可能是造成你从业务端感知到 MySQL“抖”了一下的原因。
    
    要尽量避免这种情况,你就要合理地设置 innodb_io_capacity 的值,并且平时要多关注脏页比例,不要让它经常接近 75%。
    

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code