Mysql ibdata1简述
What is stored in ibdata1?
当启用innodb_file_per_table时,表存储在它们自己的表空间中,但共享表空间仍用于存储其他InnoDB的内部数据:
数据字典也就是InnoDB表的元数据
改变缓冲区
双写缓冲区
撤消日志
其中一些可以在Percona Server上配置,以避免变得太大。例如,您可以使用innodb_ibuf_max_size为更改缓冲区设置最大大小,或者使用innodb_doublewrite_file将doublewrite缓冲区存储在单独的文件中。
在MySQL 5.6中,您还可以创建外部UNDO表空间,以便它们位于自己的文件中,而不是存储在ibdata1中。文档链接:http://dev.mysql.com/doc/refman/5.6/en/innodb-performance.html#innodb-undo-tablespace
What is causing the ibdata1 to grow that fast?
当出现MySQL问题时、通畅需要运行的第一个命令是:
SHOW ENGINE INNODB STATUSG 这将展示非常有价值的信息。开始从检查TRANSACTIONS部分,发现: ---TRANSACTION 36E, ACTIVE 1256288 sec
MySQL thread id 42, OS thread handle 0x7f8baaccc700, query id 7900290 localhost root
show engine innodb status
Trx read view will not see trx with id >= 36F, sees < 36F
这是最常见的原因,是14天前创建的一个非常古老的交易。状态为ACTIVE,这意味着InnoDB已创建数据快照,因此需要在undo中维护旧页面,以便能够在启动事务后提供数据库的一致视图。如果数据库被大量写入任务,则意味着存储了大量的撤消页面。
如果找不到任何长时间运行的事务,还可以监控INNODB STATUS中的另一个变量,即“History list length(历史记录列表长度)”。它显示待处理的清除操作的数量。在这种情况下,问题通常是由于清除线程(或旧版本中的主线程)无法以与它们进入的速度相同的速度处理撤消记录。
How can I check what is being stored in the ibdata1?
不幸的是,MySQL没有提供ibdata1共享表空间上存储内容的信息,但有两个工具非常有用。首先是由Mark Callaghan制作并在此错误报告中发表的innochecksum的修改版本。http://bugs.mysql.com/bug.php?id=57611
它很容易使用:
./innochecksum /var/lib/mysql/ibdata1
0 bad checksum
13 FIL_PAGE_INDEX
19272 FIL_PAGE_UNDO_LOG
230 FIL_PAGE_INODE
1 FIL_PAGE_IBUF_FREE_LIST
892 FIL_PAGE_TYPE_ALLOCATED
2 FIL_PAGE_IBUF_BITMAP
195 FIL_PAGE_TYPE_SYS
1 FIL_PAGE_TYPE_TRX_SYS
1 FIL_PAGE_TYPE_FSP_HDR
1 FIL_PAGE_TYPE_XDES
0 FIL_PAGE_TYPE_BLOB
0 FIL_PAGE_TYPE_ZBLOB
0 other
3 max index_id 全部的 20608 中有 19272 个撤销日志页。这占用了表空间的 93%。
检查表空间内容的第二种方法是由Jeremy Cole制作的InnoDB Ruby工具。它是检查InnoDB内部的更高级工具。例如,我们可以使用space-summary参数来获取包含每个页面及其数据类型的列表。我们可以使用标准的Unix工具来获取UNDO_LOG页面的数量:
innodb_space -f /var/lib/mysql/ibdata1 space-summary | grep UNDO_LOG | wc -l
19272
尽管这种特殊的情况下,innochedcksum 更快更容易使用,但是推荐使用杰里米的工具去了解更多的 InnoDB 内部的数据分布及其内部结构。
好,现在知道问题所在了。下一个问题:
How can I solve the problem?
这个问题的答案很简单。如果仍然可以提交该查询,请执行此操作。如果不是,将不得不杀死线程以启动回滚过程。这将阻止ibdata1的增长,但显然某个软件有一个错误或有人犯了错误。既然已经知道如何确定问题所在,所以需要使用自己的调试工具或常规查询日志查找导致问题的人员或原因。
如果问题是由清除线程引起的,那么解决方案通常是升级到更新的版本,可以使用专用的清除线程而不是主线程。有关以下文档链接的更多信息。http://dev.mysql.com/doc/innodb/1.1/en/innodb-improved-purge-scheduling.html
Is there any way to recover the used space?
不,至少在一个简单快捷的方式是不可能的。 InnoDB表空间从未缩小
请参阅James Day最近更新的以下10年的错误报告http://bugs.mysql.com/bug.php?id=1341
删除某些行时,页面将标记为已删除,以便稍后重复使用,但永远不会恢复该空间。唯一的方法是使用新的ibdata1启动数据库。要做到这一点,需要使用mysqldump进行完整的逻辑备份。然后停止MySQL并删除所有数据库,ib_logfile *和ibdata *文件。再次启动MySQL时,它将创建一个新的共享表空间。然后,恢复逻辑转储
Summary
当ibdata1文件在MySQL中增长太快时,通常是Mysql长时间运行被遗忘的事务引起的。尝试尽快解决问题(提交或终止事务),因为如果没有缓慢的mysqldump进程,将无法回收浪费的磁盘空间。
还建议监视数据库以避免这类问题。MySQL监控插件包含一个Nagios脚本,如果发现运行的事务太旧,可以提醒。
本文出处:https://www.percona.com/blog/2013/08/20/why-is-the-ibdata1-file-continuously-growing-in-mysql/
Mysql ibdata1简述的更多相关文章
- python py_innodb_page_info.py -v /usr/local/var/mysql/ibdata1
mylib.py #encoding=utf-8 import os import include from include import * TABLESPACE_NAME='D:\\mysql_d ...
- mysql ibdata1
ibdata1是什么? Mysql ibdata1即Innodb data1缩写,是innodb引擎的表空间,用于存放 数据字典Data dictionary: 只读的表,存储对象的相关信息,如占用 ...
- [转]MySql ibdata1文件太大如何缩小
From : http://blog.chinaunix.net/uid-24373487-id-4223322.html 原文地址:MySql ibdata1文件太大如何缩小 作者:emailwht ...
- MySQL ibdata1文件迁移
目的:主机系统/var目录快满了,经查询最大的文件是mysql的ibdata1文件,有17G大小,故需要迁移这个文件到其他目录下,以释放/var目录空间. 1.先备份下数据库是个好习惯 # mysql ...
- MySQL ibdata1撑爆占满磁盘空间
MySQL主从由于ibdata1占满磁盘空间-->主从失效 因为设置了innodb_file_per_table = 1,ibdata1依旧撑爆占满磁盘空间 主从断的时候,IO线程在连接,SQL ...
- mysql ibdata1损坏
机房一台服务器上的mysql运行一段时间了,突然出现了一个很奇怪的现象:重启后无法恢复了!准确情况是:启动mysql后随即就又关闭了. 查看mysql错误日志如下: 160920 22:41:41 m ...
- MySQL索引简述
文章归属:http://feiyan.info/16.html,我想自己总结,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼 ...
- Mysql分区简述
1. 数据量大的时候 mysql分表非常常用,但是mysql还可以分区. 2. 分区就是把同一张表放在不同的磁盘文件上, 当查询的时候首先定位是哪个分区(查询的时候一定要用到分区的key) 3. 分区 ...
- MySQL引擎简述
MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型IN ...
随机推荐
- asp.net页面传值方法汇总
1. Get(即使用QueryString显式传递) 方式:在url后面跟参数. 特点:简单.方便. 缺点:字符串长度最长为255个字符:数据泄漏在url中. 适用数据 ...
- Tomcat配置https、访问http自动跳转至https
1.配置Tomcat,打开$CATALINA_HOME/conf/server.xml,修改如下 <Connector port="8080" protocol=" ...
- tensorflow summary
定义summary writer = tf.summary.FileWriter(logdir=self.han_config.log_path, graph=session.graph) 1.sca ...
- Linux的用户(组),权限,文件精妙的三角关系,和强大的帮助系统
在linux中一切都是文件(文件夹和硬件外设是特殊的文件),如果有可能尽量使用文本文件.文本文件是人和机器能理解的文件,也成为人和机器进行 交流的最好途径.由于所有的配置文件都是文本,所以你只需要一个 ...
- layui框架使用总结
最近一个后台系统使用layui框架做的,遇到好多坑在这里总结一下. 1.layui的基本使用,下面的在他下面写,其他的事件也要在这个里面写 行内onclick事件是监听不到写在下面这种代码中的 ...
- canvas文字自动换行、圆角矩形画法、生成图片手机长按保存、方形图片变圆形
canvas的文字自动换行函数封装 // str:要绘制的字符串 // canvas:canvas对象 // initX:绘制字符串起始x坐标 // initY:绘制字符串起始y坐标 // lineH ...
- Ubuntu18.0.4查看显示器型号
在官网https://launchpad.net/ubuntu/+source/xresprobe下载二进制包,apt-get目前无法安装xresprobe 输入命令sudo ddcprobe 得到如 ...
- web前端--实现前后端分离的心得
1.实现前后端分离的心得 2.前后端分离实践 3.谈谈前后端的分工协作 4.从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式) 4.1.REST风格框架实战:从MVC到前后端分离 ...
- java开学考试感想及代码
上周四我们的第一节java课,王老师给我们进行啦开学考试,这也是上学期放假之前给我们约定好的 但是情况显然没有我想的那么好,其实我觉得这个atm系统比上届学生信息管理系统难的多,上届的话毕竟有小学期的 ...
- [C语言] 数据结构-预备知识跨函数使用内存
跨函数使用内存 一个函数运行结束,使用malloc函数分配的内存,如果不调用free,就不会释放 在另一个函数中还可以继续使用 #include <stdio.h> #include &l ...