我们的应用程序是有大量的数据和充满插入和删除。 所以在3周内,ibdata1文件达到了30GB。 所以我想我们可以限制ibdata1文件的大小,并将variablesinnodb_data_file_path更改为“ibdata1:10M:autoextend:max:32G”。
一旦文件达到32 GB,它连续抛出错误,如表中填充每个插入语句。
请帮我解决这个问题,以压缩或限制数据文件的大小。
因为我们需要运行我们的应用程序多年。
我build议将InnoDB表存储在不同的文件中,每个表一个文件。 它可以更容易地pipe理它们,并查看哪些表占用最多的存储空间。 将以下内容放在/etc/mysql/my.cnf (或者你的系统上的任何地方) [mysqld]部分:
innodb_file_per_table
之后,很容易识别使用太多空间的表格。 然后,您需要定期(一天一次,每月一次,无论如何)重新创build有问题的表格:
ALTER TABLE tablename ENGINE=InnoDB;
这将需要相当长的时间在大桌子上运行。 它将从头开始重新创build表文件,这将消除碎片和漏洞,从而增加文件大小。 当ALTER TABLE正在运行时,它使用所需磁盘容量的两倍。 我不知道你是否可以这样做,除非你在“文件每桌”模式下运行。
UPDATE
我想补充说,为了摆脱现有的“所有表的单个文件”InnoDB ibdata1文件,您需要执行以下操作:
要在特定的表上启用压缩,您必须:
innodb_file_per_table设置为ON innodb_file_format设置为Barracuda ALTER TABLE name ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;更改表定义ALTER TABLE name ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; Barracuda行格式由MySQL 5.5或MySQL 5.1与InnoDB插件支持 。
压缩ibdata1非常重要的一个具体原因。
什么进入ibdata1? 四件事:
你将需要做两件事情:
警告
innodb_data_file_path应该是默认的原因可以追溯到ibdata1中存储的内容。 即使您删除了@snap指定的所有数据和索引,表格元数据和MVCC数据仍然被写入ibdata1。 如果有大量的DDL命令(CREATE TABLE,DROP TABLE,ALTER TABLE等等),表元数据仍然可以使ibdata1增长。 如果有大量的事务处理,每个事务处理大量数据的快照,MVCC Data仍然可以使ibdata1增长。 因为ibdata1就是这种情况,所以最好尽可能的精简和平均。 因此,让innodb_data_file_path = ibdata1:10M:autoextend在/etc/my.cnf
顺便说一句:从我+1的@snap !!!
这是一个很好的指导张贴在这里彻底的解释和解决scheme: