innodb_max_purge_lag
分析了db33的ibdata1的记过 Total number of page: 2398464: 2.4M的page * 16K = 38G Insert Buffer Free List: 2659 B-tree Node: 5720 Freshly Allocated Page: 12725 Undo Log Page: 2352027 File Segment inode: 25333 可以看到绝大部分的空间,都是被undo log占用了....
分析: undo log 过大 看来是Mysql的一个“problematic feature” 从03年到现在一直都有人抱怨这个问题。有补丁(需要自己修改源码编译),但是不知道是否可靠... http://bugs.mysql.com/bug.php?id=57611 http://bugs.mysql.com/bug.php?id=1341 出现的原因的一个可能原因:purge 线程赶不上速度,没有即使回收不用的undo page。可以增加一些 这里面http://bugs.mysql.com/bug.php?id=45173 有人提出一些优化参考的方案: 增大innodb_io_capacity (mysq 5.0不支持 5.1才有) 设置独立的purge thread mysql 5.0不支持,5.5才有 调节 innodb_max_purge_lag 这个值表明,当purge赶不上写操作的时候,写操作delay的时间指标,我们是0,表示不等待,有可能大并发写,purge落后
查看了一下文档,结论:不推荐用innodb_max_purge_lag来实现undo log扩充的问题。 主要原因如下: 1,innodb_max_purge_lag调节参数不好设定,调整不好会强烈影响到正常insert,update的时效,得不偿失 2,innodb_max_purge_lag,有人实验证明,该参数调节影响不是很大,对delete,insert没有作用,副作用大,强烈不推荐 http://mysqldump.azundris.com/archives/81-DELETE,-innodb_max_purge_lag-and-a-case-for-PARTITIONS.html
undo log较大的原因是: 1,Mysql 每10S操作一次purge 2,每次purge mysql做多回收20 page 的undo log
如果10S之内删除,update的数据操作20 page,也就是320K的东西,就会出现purge 回收不及时的情况,就会出现undo log过大。
对应的 queue表,是删除过一次,平均queue数据长度为292 因此只要1S删除queue表超过100行,就会出现上述情况。因此只要线上大规模 delete 数据就会出现删除不干净的情况。
解决方案: 1,delete操作,脚本控制,不要一口气删除感觉,要sleep,控制在1S删除100条的速度 这个已经证明是一个非常好的方案。删除短信数据的时候,如果速度过快,ibdata显著增加,如果控速适当,该文件是根本不会增加的 2, 如果是全表删除,推荐truncate,ddl不会写undo 3, 如果是delete + where 删除的需求,也可以考虑建立新表,导入部分旧表数据+truncate 旧表的方式, 4, DAO层面支持分表操作,彻底去掉删除大表数据这种事情
innodb_max_purge_lag的更多相关文章
- [MySQL Reference Manual]14 InnoDB存储引擎
14 InnoDB存储引擎 14 InnoDB存储引擎 14.1 InnoDB说明 14.1.1 InnoDB作为默认存储引擎 14.1.1.1 存储引擎的趋势 14.1.1.2 InnoDB变成默认 ...
- [MySQL Reference Manual] 8 优化
8.优化 8.优化 8.1 优化概述 8.2 优化SQL语句 8.2.1 优化SELECT语句 8.2.1.1 SELECT语句的速度 8.2.1.2 WHERE子句优化 8.2.1.3 Range优 ...
- 9.5.8 Optimizing InnoDB Disk I/O
如果你数据库设计以及sq操作都是最佳实践,但是你数据库仍然被较重的io活动拖累的较慢,那么试一试看看top或者windows的任务管理器,cpu使用率和工作量低于70%,那么或许是您的硬盘较慢. 1 ...
- 初识 MySQL 5.6 新功能、参数
摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不 ...
- mysql 查看存储引擎的状态 show engine innodb status 详解
首先,让我们来了解一下 SHOW INNODB STATUS 输出的基础,它打印了很多关于 InnoDB 内部性能相关的计数器.统计.事务处理信息等.在 MySQL 5 中,InnoDB 的性能统计结 ...
- 开启InnoDB每表一个独立的表空间
mysql> show variables like '%innodb%'; +---------------------------------+----------------------- ...
- [mysql] mysql 5.6.27 innodb 相关参数
mysql> show variables like '%innodb%';+------------------------------------------+--------------- ...
- MySql中的变量定义
根据mysql手册,mysql的变量分为两种:系统变量和用户变量.但是在实际使用中,还会遇到诸如局部变量.会话变量等概念.根据个人感觉,mysql变量大体可以分为四种类型: 一.局部变量. 局部变量一 ...
- MySQL 5.5 服务器变量详解二(转)
add by zhj:在MySQL5.6中对一些参数有增删改,详见http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html ...
随机推荐
- hdoj--5100--Chessboard(数学推理)
Chessboard Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- Shredding Company(dfs)
http://poj.org/problem?id=1416 题意:将一个数分成几部分,使其分割的各个数的和最大并且小于所给的数. 凌乱了..参考的会神的代码..orz... #include < ...
- Vue开发入门看这篇文章就够了
摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...
- 认识JS的基础对象,定义对象的方法
JS的基础对象: 1.window //窗口对象 2.document //文档对象 3.document.documentElement //html对象 4.docume ...
- 记录一下Junit测试MongoDB,获取MongoTemplate
只是自己记录一下,测试MongoDB帮助类时,没有配置文件的测试 public class HelperTest { MongoTemplate template; @Before public vo ...
- Java学习笔记之从C++转Java
之前一直是做C++后台开发的,习惯了命令行和g++,由于工作原因现在开始转java. 1.参考书籍:java编程思想(think in java),java核心技术(core java); 2.怎么在 ...
- android 提纲挈领
之后的android学习将侧重三方面: 1.基础内容例如xml属性.sharedpreference.数据库必须能够熟记于心. 2.开源library熟练应用,能够了解如何更好地使用各种开源libra ...
- Discuze修改用户名长度限制
第一步,在网站 uc_client\model 目录下的 user.php文件中,找到如下代码: ? 1 if($len > 15 || $len < 3 || preg_match(&q ...
- MVC简单的解释
MVC (Model-View-Controller,模型视图控制器)是一种软件的设计模式,它最早是由 20 世纪 70 年代的 Smalltalk 语言提出的,即把一个复杂的软件工程分解为三个层 ...
- Android fragment的切换(解决REPLACE的低效)
在项目中切换Fragment,一直都是用replace()方法来替换Fragment.但是这样做有一个问题,每次切换的时候Fragment都会重新实列化,重新加载一次数据,这样做会非常消耗性能用用户的 ...