Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL purge 线程

MySQL purge 线程

作者头像
保持热爱奔赴山海
发布于 2019-09-17 03:30:23
发布于 2019-09-17 03:30:23
2.7K00
代码可运行
举报
文章被收录于专栏:数据库相关数据库相关
运行总次数:0
代码可运行

MySQL中purge线程知识:

https://dev.mysql.com/doc/refman/5.7/en/innodb-improved-purge-scheduling.html

InnoDB中delete所做删除只是标记为删除的状态,实际上并没有删除掉,因为MVCC机制的存在,要保留之前的版本为并发所使用。最终的删除由purge线程来决定的什么时候来真正删除文件的。

purge的处理过程: InnoDB存储引擎第二版 Page 317 - 318

innodb_purge_batch_size参数:

用来设置每次purge操作需要清理的undo log page的数量。【默认300,表示每次清理300个page,支持动态修改】

设置的越大,表示每次回收的页也就越多,可供重用的undo page也就越多,就能减少磁盘存储空间与分配的开销。不过该参数设置得太大,则每次需要purge处理更多的undo page,从而导致CPU和磁盘IO过于集中于对undo log的处理,使性能下降。普通用户不建议调整这个参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 > show VARIABLES like 'innodb_purge_batch%';
 +-------------------------+---------+
 | Variable_name           |   Value |
 |-------------------------+---------|
 | innodb_purge_batch_size |     300 |
 +-------------------------+---------+

innodb_purge_threads 参数:

当有很多的表进行DML操作时候, 增大 innodb_purge_threads 能提高purge的效率(清理掉MVCC机制导致的老旧数据)。

现在的MySQL版本中。purge线程已经从master线程中独立出来,使用单独的线程提高了可伸缩性。

从MySQL5.7.8开始,这个参数默认是4,最大可以设置为32.【老版本里面这个值默认是1】

innodb_max_purge_lag 参数:

当InnoDB存储引擎的压力非常大时,并不能高效地进行purge操作。那么history list(undo log page数量)的长度会变得越来越长。innodb_max_purge_lag 就是控制history list的长度,若长度大于该值,就会延缓DML的操作。该值默认为0,表示不做任何限制。【不建议修改这个参数值!! 】

innodb_max_purge_lag_delay 参数:

表示当上面innodb_max_purge_lag的delay超时时间太大,超过这个参数时,将delay设置为该参数值,防止purge线程操作缓慢导致其他SQL线程长期处于等待状态。默认为0,一般不用修改。

一个关于删除数据后磁盘空间再次利用的实验:

会话1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use test;
CREATE TABLE `t1` (`a` int(11) NOT NULL AUTO_INCREMENT, `b` int(11) DEFAULT '100', `c` varchar(10) NOT NULL DEFAULT 'cccc', PRIMARY KEY (`a`)) ;
insert into t1 (b,c) select 111,'cccccc';

会话2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /data/mysql/test/
watch -n 1 'ls -lh t1.ibd'

然后再到会话1去多次执行插入数据的操作 insert into t1 (b,c) select b,c from t1 ;  重复执行多次,可以看到会话2的t1.ibd在不断在的增大。

假设等到t1.ibd增大到112MB时候,我们到会话1去一个全量的删除操作delete from t1 where 1=1; 然后少等片刻(等purge线程自动清理数据、master线程将数据落盘)。

这时候去观察到会话2窗口,可以看到的t1.ibd文件体积一点也没有减少。

再次到t会话1窗口去执行少量的插入操作,并观察会话2的t1.ibd文件体积。

可以看到t1.ibd文件的体积没有再次增长,(原因:purge线程将上述实验中被删除数据部分对应的磁盘空间标记为可用,可以被后续写入操作使用,这样就不用再次分配磁盘空间了)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/10/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入理解MySQL事务日志-Undo Log
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
绿水长流z
2025/01/03
2010
深入理解MySQL事务日志-Undo Log
mysql-innodb-事务
InnoDB存储引擎层产生,物理日志,记录的是对页的修改,innodb1.2版本后,最大512GB
温安适
2020/05/30
5220
MySQL 中删除的数据都去哪儿了?
那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情况下,如果事务A删除了 id=1 的数据,同时事务B又去读取 id=1 的数据,如果这条数据真的被删除了,那 MVCC 拿啥数据返回给用户呢?
冬夜先生
2021/10/08
1.6K0
innodb核心配置总结---官方文档阅读笔记
-- 每个表单独文件和单独表空间,而不是放在系统表空间,每个表的文件表空间允许操作系统在表被截断或删除时回收磁盘空间。每表文件表空间还支持动态和压缩行格式以及相关功能
丿丶MySQL灬灬
2021/10/25
1.2K0
浅析InnoDB purge线程
在处理一个故障的时候怀疑大量的删除数据导致了查询比较慢,但是自己对purge线程的工作流程一直不太清楚,本文不做深入解析,只做工作流程解析,待着如下问题进行:
老叶茶馆
2020/12/15
2.2K0
深入解析InnoDB Undo Log:事务回滚与MVCC的核心机制
晚上不吃饭了
2025/05/23
1670
史上最详尽,一文讲透 MVCC 实现原理
上一篇文章中,我们介绍了 mysql 的 crash safe 机制,也是 ACID 中原子性的实现 — redolog 的原理和配置方法。 mysql 异常情况下的事务安全 — 详解 mysql redolog
用户3147702
2022/06/27
1.6K0
史上最详尽,一文讲透 MVCC 实现原理
MySQL内核InnoDB存储引擎详解
MySQL从5.5版本开始将InnoDB作为默认存储引擎,该存储引擎是第一个完整支持事务ACID特性的存储引擎,且支持数据行锁,多版本并发控制(MVCC),外键,以及一致性非锁定读。 作为默认存储引擎,也就意味着默认创建的表都会使用此存储引擎,除非 使用ENGINE=参数指定创建其他存储引擎的表。
星哥玩云
2022/08/17
3.4K0
MySQL内核InnoDB存储引擎详解
MySQL底层概述—3.InnoDB线程模型
InnoDB存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务。
东阳马生架构
2025/02/11
1020
MySQL 5.7 新特性之三
本系列文章基于5.7.20 版本讲述MySQL的新特性,从安装,文件结构,SQL,优化,复制等几个方面展开介绍5.7 的新特性和功能,同时也建议大家跟踪官方blog和文档 ,以尽快知悉其新的变化。
用户1278550
2018/08/09
7460
mysql体系结构
2用户名密码验证(通过授权表做的验证数据库一启动,会把授权表加载到内存中 mysql.user mysql.db mysql.table_priv mysql.column_priv)
萧晚歌
2021/11/17
1.1K0
快速安全删除MySQL大表
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户1148526
2019/10/22
6.2K1
MySQL七:一文详解六大日志
「mysql数据库中日志是重要组成部分,记录着数据库运行期间各种状态信息」。主要有6类:
云扬四海
2022/09/26
1.5K0
Mysql 学习 --- innodb存储引擎
1.MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者可以按照自己的意愿来进行开发。
用户4158112
2020/11/19
9500
【我在拉勾训练营学技术】Mysql 架构原理
mysql 数据库作为现在互联网企业首选的数据库,我们程序员就应该对它多一些了解,我在拉勾训练营学到第五阶段啦,了解了mysql 整体架构,记录下来。
程序员爱酸奶
2021/03/21
5730
MySQL五:InnoDB线程模型
在Innodb存储引擎中,后台线程的主要作用是「负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据」。此外它会将已经修改的数据文件刷新到磁盘文件中,保证在发生异常的情况下,Innodb能够恢复到正常的运行状态。
云扬四海
2022/09/26
4890
MySQL 存储引擎 - InnoDB 实现原理介绍
内存结构主要包括 Buffer Pool、Change Buffer、Adaptive Hash Index和 Log Buffer 四大组件
一个会写诗的程序员
2023/03/08
1.2K1
MySQL 存储引擎 - InnoDB 实现原理介绍
MySQL意外查不到数据,真相令人惊掉下巴
前几天,我的朋友小明同学火急火燎地找到我,说有个表刚导入了几千万数据,却怎么也查不到数据,很是抓狂,让我给看看。
田帅萌
2019/07/05
1.6K0
Mysql配置文件 innodb引擎(上)
这个是Innodb最重要的参数,主要作用是缓存innodb表的索引,数据,插入数据时的缓冲,默认值为128M。
陈不成i
2021/06/11
3.2K0
MySQL innodb引擎的事务执行过程
总结以上的三个问题,其实就是关于MySQL innodb事务的流程;那么接下来,我将详细总结下一一一:MySQL innodb的事务流程:
星哥玩云
2022/08/16
9690
相关推荐
深入理解MySQL事务日志-Undo Log
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档