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 ...
随机推荐
- RxJava/RxAndroid 使用实例实践
原文地址 RxAndroid Tutorial响应式编程(Reactive programming)不是一种API,而是一种新的非常有用的范式,而RxJava就是一套基于此思想的框架,在Android ...
- 极高效内存池实现 (cpu-cache)
视频请看 : http://edu.csdn.net/course/detail/627 1.内存池的目的 提高程序的效率 减少运行时间 避免内存碎片 2.原理 要解决上述两个问题,最好的方法就是 ...
- mysql Inoodb 内核
MySQL从5.5版本开始将InnoDB作为默认存储引擎,该存储引擎是第一个完整支持事务ACID特性的存储引擎,且支持数据行锁,多版本并发控制(MVCC),外键,以及一致性非锁定读. 作为默认存储引擎 ...
- es索引的RestHighLevelClient实现
java代码: import java.io.IOException; import org.apache.http.HttpHost; import org.elasticsearch.action ...
- nodeJs的npm报错问题
1. Failed at the phantomjs-prebuilt@2.1.14 install script 'node install.js'. 解决办法: npm install phant ...
- Oracle 通过字段名查询其所在的表
select owner , table_name , column_name from dba_tab_columns where column_name='LOG_TYPE' ;
- 使用 ahk 让普通键盘变为Dvorak键盘
本文告诉大家,如何使用软件做出Dvorak键盘. 在开始说如何做之前,需要告诉大家,什么是Dvorak键盘. Dvorak Simplified Keyboard /ˈdvɔːræk, dəˈvɔː- ...
- C# 代码占用的空间
是不是代码会占用空间,如果一个程序初始化需要 100M 的代码,那么在他初始化之后,这些代码就没有作用了,他会不会占空间?本文经过测试发现,代码也是会占空间. 我写了2k个垃圾类代码,然后把他放在一个 ...
- ASP.NET 省市县三联动 (包含用户控件)
将压缩文件下载解压后,将用户控件拖到解决方案里,直接可以拖到需要用到的页面里 使用: 数据库是最新的(父子级关系表结构----Region2016.sql) 右键记事本打开,放在sqlServerl里 ...
- SSH框架中NoSuchMethodError: antlr.collections.AST.getLine()的解决方案
问题: 当配置好SSH框架后,使用Hibernate的Query功能时发生如下异常: NoSuchMethodError: antlr.collections.AST.getLine() 原因: St ...