mysql多线程删除_MySQL后台线程的清理工作

本文介绍了MySQL的后台线程在多线程删除过程中的角色,包括page cleaner thread负责的脏页刷盘和purge thread进行的undo页回收。page cleaner线程从5.6版本开始独立,5.7支持多线程刷脏页,可以通过调整innodb_page_cleaners参数优化性能。purge线程则处理已提交事务的undo清理和删除标记的数据行。通过监控Innodb_buffer_pool_wait_free和Innodb_rows_deleted等状态变量,可以判断是否需要调整这些参数。
摘要由CSDN通过智能技术生成

后台清理工作:脏页刷盘、undo回收

1、page cleaner thread:刷新脏页

2、purge thread:清空undo页、清理“deleted”page

一、innodb_page_cleaners

page cleaner线程从buffer pool中刷脏页的线程数量。

1、5.7新特性

1、5.6版本以前,脏页的清理工作交由master线程的;

2、Page cleaner thread是5.6.2引入的一个新线程(单线程),从master线程中卸下buffer pool刷脏页的工作独立出来的线程(默认是启一个线程);

3、5.7开始支持多线程刷脏页;

2、发起脏页的写请求

清理因为触发需要脏页回收的脏页(脏很久了、冷脏页……)

注意:真正干活的,将dirty page写入磁盘的是innodb_write_io_threads

3、如何调整这个参数

mysql> show variables like 'i%cleaners';+----------------------+-------+

| Variable_name | Value |

+----------------------+-------+

| innodb_page_cleaners | 1 |

+----------------------+-------+

1 row in set (0.05 sec)

1、配置文件my.cnf中添加innodb_page_cleaners=num值

2、默认是1;最大可以是64,也就是会有64个page cleaner线程并发工作清理脏页

4、如何判断是否要修改增加innodb_page_cleaners

mysql> show global status like '%wait_free';+------------------------------+-------+

| Variable_name | Value |

+------------------------------+-------+

| Innodb_buffer_pool_wait_free | 0 |

+------------------------------+-------+

1 row in set (0.01 sec)

Innodb_buffer_pool_wait_free:标志着脏页有没有成为系统的性能瓶颈;如果值很大,则需要增加innodb_page_cleaners值,同时增加写线程。

9c0045f91e8bf308f8102751ba734a67.png

1、通常,对于buffer pool的写发生在后台,当innodb需要读或创建一个数据页,但是没有干净的可用页,innodb就会为等待的操作能完成先将一些脏页刷入磁盘。

2、Innodb_buffer_pool_wait_free就是这等待操作的实例数。如果innodb_buffer_pool_size的大小设置适当,这个值就会很小,甚至为0。

二、innodb_purge_threads

purge线程,后台线程,致力于innodb清理,资源回收操作。

1、清理操作

1、清理undo页

undo记录修改前的数据用于回滚,已提交的时候,不再回滚,即可清理该undo信息。

2、清理page里面的有“deleted”标签的数据行

1、当我们delete数据行时,是对数据页中要删除的数据行做标记“deleted”,事务提交(速度快);

2、后台线程purge线程对数据页中有“deleted”标签的数据行进行真正的删除。

2、调整依据

1、系统存在大量的delete、对主键的update

mysql> show global status like '%rows%d%ted';+---------------------+-------+

| Variable_name | Value |

+---------------------+-------+

| Innodb_rows_deleted | 0 |

| Innodb_rows_updated | 5 |

+---------------------+-------+

2 rows in set (0.01 sec)

2、mysql> show engine innodb status \G

Trx id counter 1159171#事务计数

Purgedone for trx's n:o < 1157813  #事务清空位置#1159171-1157813表示有待清空的事务量

undo n:o< 0#当前清理事务undo位置

state: running but idle  #启动但是闲置

History list length1029#当前undo数据页的总量1029*16K

3、调整:innodb_purge_threads默认值是1,OLTP系统一般会修改为4

mysql> show variables like '%purge_t%';+----------------------+-------+

| Variable_name | Value |

+----------------------+-------+

| innodb_purge_threads | 4 |

+----------------------+-------+

1 row in set (0.01 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值