MySQL后台线程的清理工作
后台清理工作:脏页刷盘、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值,同时增加写线程。

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 #事务计数
Purge done for trx's n:o < 1157813 #事务清空位置
#1159171-1157813表示有待清空的事务量 undo n:o < 0 #当前清理事务undo位置
state: running but idle #启动但是闲置
History list length 1029 #当前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)
MySQL后台线程的清理工作的更多相关文章
- mysql后台线程详解
1.mysql后台线程 mysql后台线程主要用于维持服务器的正常运行和完成用户提交的任务,主要包括:master thread,read thread,write thread,redo log t ...
- MySQL后台线程整理总结
本文整理自<MySQL技术内幕 InnoDB存储引擎> MySQL通过后台各种线程.内存池.文件交互来实现对外服务的,不同线程实现不同的资源操作,各个线程相互协助,共同来完成数据库的服务. ...
- 常见mysql后台线程
1.IO THREAD MySQL有很多后台线程 其中包括了负责IO的相关线程IO THREAD 1. 参数innodb_write_io_threads 写线程 默认四个,负责数据块的写入 2 ...
- quatz调度-手动终止线程(2) Cleaner线程做清理工作
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import ja ...
- InnoDB体系架构(一)后台线程
InnoDB体系架构——后台线程 上一篇已经了解了MySQL数据库的体系结构 这一篇除了介绍InnoDB存储引擎的体系架构外,同时进一步了解InnoDB的后台线程. InnoDB存储引擎是多线程的模型 ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
- 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程
额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...
- C#夯实基础之多线程二:主线程、前台线程与后台线程
我们在<C#夯实基础之多线程一:初识多线程>一文中第二部分中指出,既然windows最终发展出了多线程模型,按理说,我们直接使用一个.NetFramework的线程类就可以直接撸代码了,但 ...
- 开源WinForms界面开发框架Management Studio 选项卡文档 插件 Office 2007蓝色风格 后台线程
Management Studio是我在WinForms小项目开发过程中搭建起来的一个插件式结构的应用程序框架,因为简单灵活又容易扩展,现在将它开源供读者参考. 跑起来的效果图如下所示,具备选项卡式多 ...
随机推荐
- day_ha配置文件
流程图: 代码 #!/sur/bin/env python # -*- coding: utf-8 -*- #{"backend": "www.oldboy.org&qu ...
- 基于NopCommerce的开发框架——缓存、网站设置、系统日志、用户操作日志
最近忙于学车,抽时间将Nop的一些公用模块添加进来,反应的一些小问题也做了修复.另外有园友指出Nop内存消耗大,作为一个开源电商项目,性能方面不是该团队首要考虑的,开发容易,稳定,代码结构清晰简洁也是 ...
- 初识 ActiveMQ
其实算不上初识了,工作一年来一直都有接触 mq 相关的东西.但是,从来都是粘贴复制别人的配置代码,却从未认真系统的学习过它,现在线上用 mq 的项目出问题了,老板在后面拿枪指着呢,不得不好好研究下了. ...
- CSS3学习系列之选择器(三)
E:enabled伪类选择器和E:disabled伪类选择器 E:enabled伪类选择器用来指定元素处于可用状态的样式. E:disabled伪类选择器用来指定当元素处于不可用状态时的样式. 当一个 ...
- [翻译]怎么写一个React组件库(二)
本文同步发布于知乎专栏 https://zhuanlan.zhihu.com/p/27434018,喜欢本文的就去知乎点个赞支持下吧- 引言 该系列文章将通过创建一个组件库来引导你学习如何构建自己的组 ...
- GIS与水文分析(1)GIS与水文学
GIS与水文分析(1)GIS与水文学 对于大部分GIS从业人员或者利用GIS作为研究方向的人员来说,水文学过于专业,更偏重于理论化,很难从GIS的角度来模拟和分析水文的过程.这其实是个普遍性的问题,任 ...
- python flask(多对多表查询)
我们在flask的学习中,会难免遇到多对多表的查询,今天我也遇到了这个问题.那么我想了好久.也没有想到一个解决的办法,试了几种方法,可能是思路的限制我放弃了,后来,我就在网上百度,可是发现百度出来的结 ...
- Spring配置注解详解
- 插入多行数据的时候,一个insert插入多行
如:insert into t_users(a,b,c)value('1','2','3'),('3','4','5'),('6','7','8') ('1','2','3'),('3','4','5 ...
- webpackage 2.x 使用
webpackage 2.x 使用 安装---(在项目目录下) //1.初始化npm的配置(添加package.json) npm init //2.安装 webpackage npm install ...