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小项目开发过程中搭建起来的一个插件式结构的应用程序框架,因为简单灵活又容易扩展,现在将它开源供读者参考. 跑起来的效果图如下所示,具备选项卡式多 ...
随机推荐
- PHP版本替换, phpinfo和php -v显示版本信息不一致
环境:OS X EI Capitan 10.11 & lnmp 背景: 1想将lamp(xampp安装的,php5.2)换成 lnmp(php7.0) 2php5.2卸载(xampp卸载& ...
- implements ApplicationContextAware 获取spring 容器
1.新建 ApplicationContextUtil 类 ,通过实现 ApplicationContextAware 的 setApplicationContext 方法,得到context上下文: ...
- 利用浏览器查找font-family的css编码
提供一种利用Chrome快速查找字体编码的小技巧 打开浏览器,按下键盘F12 点击Console控制台 输入escape("要查询的字体中文名称")(注意:括号与引号都是英文输入法 ...
- iOS-swift-协议和拓展
1 协议(protocol) 使用关键字 protocol 创建协议. protocol ExampleProtocol { var simpleDescription: String { get } ...
- JavaScript中的string对象及方法
string对象 string对象的两种创建 var a="hello"; var b=new String("hello"); //下面是方法 //charA ...
- spring4 之 helloworld
1.从官网下载相关JAR包 spring-framework-4.2.1.RELEASE-dist(下载地址:http://maven.springframework.org/release/org/ ...
- 浅谈Swift和OC的区别
前言 转眼Swift3都出来快一年了,从OC到Swift也经历了很多,所以对两者的一些使用区别也总结了一点,暂且记录下,权当自己的一个笔记. 当然其中一些区别可能大家都有耳闻,所以这里也会结合自身的一 ...
- celery_01 _celery安装启动
简介:celery是一个分布式队列的管理工具,提供了快速管理和操作分布式任务队列的一些方法的框架 特点:1.celery易于使用和维护,不需要进行很复杂的配置,简单的celery例子: from ce ...
- 自动安装lnmp
注:需先上传各安装包至服务器.#!/bin/bash #! auto install lnmp #! 安装依赖环境 yum -y groupinstall "X Software Devel ...
- DOM 和 BOM 的 对象 和方法
DOM 对象 有 documet event element attlibute 方法 getElementById getElementsBytagname getElementsB ...