mysql innodbpurgethreads_MySQL · 特性分析 · InnoDB transaction history

本文探讨了MySQL InnoDB在高写压力下可能出现的事务历史积累问题,导致性能下降或空间耗尽。分析了InnoDB的purge线程作用,通过测试案例展示了purge线程在特定场景下可能无法有效处理历史事务。提出了问题出现的常见场景,如长时间查询和MySQL重启,并给出了一些优化建议,包括监控事务历史长度、调整参数以及预热buffer pool等方法。
摘要由CSDN通过智能技术生成

背景

在写压力负载比较重的MySQL实例上,InnoDB可能积累了较长的没有被purge掉的transaction history,导致实例性能的衰减,或者空闲空间被耗尽,下面就来看看它是怎么产生的,或者有没有什么方法来减轻,避免这样的问题出现。

InnoDB purge 概要

InnoDB是一个事务引擎,实现了MVCC特性,也就是在存储引擎里对行数据保存了多个版本。在对行数据进行delete或者update更改时,行数据的前映像会保留一段时间,直到可以被删除的时候。

在大部分OLTP负载情况下,前映像会在数据操作完成后的数秒钟内被删除掉,但在一些情况下,假设存在一些持续很长时间的事务需要看到数据的前映像,那么老版本的数据就会被保留相当长一段时间。

虽然MySQL 5.6版本增加了多个purge threads来加快完成老版本数据的清理工作,但在write-intensive workload情况下,不一定完全凑效。

测试案例

Peter Zaitsev 使用sysbench的update进行的测试,无论是 innodb_purge_threads=1 还是8的时候,显示的transaction history快速增长的情况,如下图所示:

cbfe1b3873bf886f205f164819ecb38c.png

transaction history增长情况

下面看一下同步测试过程中purge的速度(可以通过I_S.innodb_metrics进行查询):

a55c8db83085ca2e24be65d9f305cbbb.png

InnoDB purge 情况

显示在并发 process 的过程中,purge thread 其实处在饥饿状态,待sysbench结束,purge线程满载运行清理工作。

对于这个测试结果,这里需要说明下:

对于Peter Zaitsev的测试,其实主要是为了说明transaction history的情况,如果是用sysbench进行小事务的OLTP测试,并不会产生这么明显的transaction history增长而purge threa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值