结合源码分析show engine innodb status输出内容(一)

show engine innodb status输出内容包括以下几块(我所有试验都是在mysql5.6.22上实现)

  • background thread
  • semphores
  • latest detected deadlock(该部分内容不一定输出,只有在系统出现过死锁情况下才输出)
  • latest foreign key error(该部分内容不一定输出,只有在系统出现过外键错误情况下才输出)
  • transactions
  • file I/O
  • logs
  • buffer pool and memory
  • insert buffer and adaptive hash index
  • row operations
接下来我将对各个模块输出内容进行解析

1.background thread(后台线程)


图1 background thread 输出

在执行show engine innodb status命令之后,在background thread之前的信息是innodb status相关状态信息,per second averages calculated from the last 29 seconds意思是说接下来的信息,是对过去29秒时间内innodb状态的输出。

Innodb存储引擎室多线程的模型,因此其后台有多个不同的后台线程负责处理不同的任务。Master thread是一个非常核心的后台线程,主要负责缓冲池中的数据异步刷新到磁盘,保证数据的一致性。Master thread具有最高的线程优先级别,其内部由多个循环(loop)组成:主循环,后台循环,刷新循环,暂停循环。

参数

说明

Srv_master_thread loops

Master线程的循环次数,master线程在每次loop过程中都会sleepsleep的时间为1秒。而在每次loop的过程中会选择activeshutdownidle中一种状态执行。Master线程在不停循环,所以其值是随时间递增的。

Srv_active

Master线程选择的active状态执行。Active数量增加与数据表、数据库更新操作有关,与查询无关,例如:插入数据、更新数据、修改表等。

Srv_shutdown

这个参数的值一直为0,因为srv_shutdown只有在mysql服务关闭的时候才会增加。

Srv_idle

这个参数是在master线程空闲的时候增加,即没有任何数据库改动操作时。

Log_flush_and_write

Master线程在后台会定期刷新日志,日志刷新是由参数innodb_flush_log_at_timeout参数控制前后刷新时间差。

:Background thread部分信息为统计信息,即mysql服务启动之后该部分值会一直递增,因为它显示的是自mysqld服务启动之后master线程所有的looplog刷新操作。通过对比activeidle的值,可以获知系统整体负载情况。Active的值越大,证明服务越繁忙。


图2 master thread loop


在图2中可以看到,master thread作为后台程序,一直不停的在loop,而loop过程中会选择active task 或者idle task函数执行,只有在innodb_force_recovery(对应图2的srv_force_recovery)参数设置值大于2的情况下,master thread会进入suspend状态。在srv_shutdown_s

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值