移动云海山数据库(He3DB)-InnoDB后台线程(PurgeThread)

Purge Thread主要工作为回收已经使用并分配的undo页。
InnoDB1.1开始,purge操作可以从Master Thread中独立到Purge Thread中进行;InnoDB1.2开始,支持多个Purge Thread,;默认为1个协调线程、3个工作线程,协调线程也会充当工作线程角色。

一、协调线程

srv0srv.cc–>srv_purge_coordinator_thread
image.png
循环执行purge操作
image.png
1、srv_purge_coordinator_suspend
如果没有要清除的记录,或者上次清除没有清除任何记录,则等待活动,挂起协调线程
image.png
2、srv_purge_should_exit
检查是否需要停止purge thread,根据shutdown state进行判断
image.png
2.1 srv0start.h–>srv_shutdown_t
image.png
0:数据库正常运行,不shutdown
1:数据库关闭时执行logs_empty_and_mark_files_at_shutdown():在最新的lsn上创建一个检查点,并将其写入数据库中每个数据文件的第一页
2:在此阶段,主线程和清除线程必须已完成其工作。一旦我们进入这个阶段,page_cleaner就可以清理缓冲池并退出
3:确保缓冲池可以释放后的最后一个阶段:刷新所有文件空间并关闭所有文件
4:退出所有线程(srv_purge_should_exit做了个判断,即不执行停止的条件为需要慢停止且上一次purge大小不为0
(srv_fast_shutdown为1,则不会在关闭前运行清除和插入缓冲区合并;为2,则甚至不要在关闭时将缓冲池刷新到数据文件))
3、srv_do_purge
执行purge操作,直到没有更多的记录要清除,并且配置或服务器状态没有更改。如果用户配置了多个清除线程,那么我们将其视为一个线程池,并且只有在清除无法跟上更新时才使用额外的线程
image.png
3.1自上次快照后的历史purge大小大于上次快照的大小,则增加线程;否则减少线程
image.png
3.2不能超过配置的线程数
image.png
3.3 purge前创建一次历史记录的快照
image.png
3.4执行purge操作
image.png
trx0purge.cc–>trx_purge
image.png
3.4.1 clone_oldest_view
克隆最老的read view,防止清除到正在读取的undo
image.png
3.4.2 trx_purge_attach_undo_recs
获取需要被purge的undo log
image.png
……|–>trx_purge_fetch_next_rec
循环获取可以被purge的undo log,默认一次最多获取300个undo log record,可以通过innodb_purge_batch_size来调整。
image.png
…………|–>trx_purge_fetch_next_rec
image.png
………………|–>trx_purge_choose_next_log
image.png
……………………|–>set_next
从purge_sys->purge_queue中读取下一个元素。
如果元素具有相同的事务处理编号,则合并它们。
image.png
………………|–>trx_purge_get_next_rec
image.png
3.4.3判断是否可进行异步清理
image.png

二、工作线程

srv0srv.cc–>srv_worker_thread
从工作队列中读取任务并执行这些任务
image.png
挂起工作线程,如果队列中有任务发生则唤醒purge协调线程,直到Purge has been shutdown。
需要确保工作线程在purge协调线程之后退出。否则,purge协调线程可能会在trx_purge_wait_for_workers_to_complete()中永远等待。
image.png

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值