innodb 体系结构(后台进程)

一.后台进程(innodb 1.0.x以前的)

1.master thread

master thread具有最高的线程优先级别,其内部由多个循环(loop)组成:主循环(loop)、后台循环(backgroup loop)、刷新循环(flush loop)、暂停循环(suspend loop)

①loop:每秒钟的操作和每10s的操作

每秒的操作

...日志缓冲刷新到磁盘,即使这个事务还没有提交(总是)

...合并插入缓冲(可能):

并不是每秒都发生,innodb存储引擎会判断当前一秒内发生的io次数是否小于5次,如果小于5次,innodb认为当前的io压力很小,可以执行合并插入缓冲操作。

...至少刷新100个innodb的缓冲池中的脏页到磁盘(可能)

innodb存储引擎通过判断当前缓冲池中脏页的比例(buf_get_modified_ratio_pct)是否超过了配置文件中innodb_max_dirty_pages_pct这个参数

...如果当前没有用户活动,则切换到backgroup loop(可能)

 

每10s的操作

...刷新100个脏页到磁盘(可能的情况下)

...合并至多5个插入缓冲(总是)

...将日志缓冲刷新到磁盘(总是)

...删除无用的undo页(总是)

...刷新100个或者10个脏页到磁盘(总是)

 

2.background loop

若当前没有用户活动(数据库空闲时)或者数据库关闭(shutdown),就会切换到这个循环

...删除无用的undo页(总是)

...合并20个插入缓冲(总是)

...跳回到主循环(总是)

...不断刷新100个页直到符合条件(可能,跳转到flush loop中完成)

 

innodb1.2.x以前的

innodb_io_capacity:表示磁盘io的吞吐量,默认值为200

...在合并插入缓冲时,合并插入缓冲的数量为innodb_io_capacity值得5%

...在从缓冲区刷新脏页时,刷新脏页的数量为innodb_io_capacity

若用户使用了ssd类的磁盘,或者将几块磁盘做了raid,当存储设备拥有更高的io速度时,完全可以将innodb_io_capacity的值调的再高点,直到符合磁盘io的吞吐量为止

 

innodb_max_dirty_pages_pct:改为默认75%

innodb_adaptive_flushing:此功能会当脏页的比例小于innodb_max_dirty_pages_pct时,也会刷新一定量的脏页

innodb_purge_batch_size:之前每次进行full purge操作时,最多回收20个undo页,该参数可以控制每次full purge回收的undo页

 

show engine innodb status\G;

其中每秒的loop次数与sleep次数比例接近1:1,每10s的loop与sleep次数接近1:10,如是这种情况,则说明数据库较闲,如果loop次数与sleep次数大于1:1,说明数据库比较忙,睡觉的时间少了。

 

innodb 1.2.x

从master thread线程分离到一个单独的page cleaner thread,从而减轻了master thread的工作

转载于:https://www.cnblogs.com/duanzexun/p/10729899.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值