我有生产服务器

2011年11月5日,IBDATA尺寸为100克。在大约3个月内,它增加到200G。因此,它的大小增加了一倍。因此,它是一个巨大的数据。目前LVM为251G。

我的所有桌子都有InnoDB.i我的每张表不使用InnoDB。我在lvm上有我的idbata,所以我应该增加多少供将来使用。

或其他任何处理场景的最佳方法。

有帮助吗?

解决方案

您需要停止使用InnoDB(与 innodb_file_per_table 关闭)和LVM快照。这就是为什么:

我有一个使用MySQL作为数据库的监视系统。它还具有Innodb_file_per_table。在6个月的空间中,它增加到1.3TB。

我的雇主公司不能为此监视系统停机。

我试图为这个怪物数据库创建一个从属。我将/var/lib/mysql的rsync运行到从服务器。它的第一个通行证花了42个小时(这不是错字,1天18小时)。第二次通行证花了84小时(3天12小时),只完成了15%(复制220GB)。如您所见,我放弃了第二个Rsync。

该问题源于Ibdata1为1.3TB。

当Innodb_file_per_table关闭时,ibdata1内部是什么?

  • 表数据页
  • 表索引页
  • 表元数据(表空间ID管理)
  • MVCC数据(用于隔离交易,酸合规性)

在较重的环境中,这四种类型的所有记录都被读取和/或编写。 Rsync经历了一场噩梦,试图使Ibdata1合并到足以编写对从服务器的更改。根据我的Linux高级工程师的说法,LVM快照不会更好。

您唯一的求助是开始使用Innodb_file_per_table。

为了让您进一步查看此需求,请运行此查询(应该为您花5-10分钟)

SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
(SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM
information_schema.tables WHERE table_schema NOT IN
('mysql','information_schema','performance_schema') AND
engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;

使用InnoDB的总数,将其与IBDATA1的大小进行比较。您会发现可能有30GB的差异较小。我在监视系统中对IBDATA1的查询跑了,只有27GB用于表格元数据和新的MVCC信息。该文件始终会发生稳定的增长。

这是您可以做的:将所有InnoDB转换为使用Innodb_file_per_table。 我在Stackoverflow上写了一篇关于如何做的文章. 。您不仅能够在单独的文件中拥有EASCH表,而且还可以将IBDATA1的增长率保持在最低限度。

更新2012-02-22 13:00 EST

执行InnoDB的清理时,请确保取消多个IBDATA文件的制作。您的设置应为默认值:

[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend

其他提示

除了Rolando所说的话外,切换到每个文件设置还可以使您通过定期维护恢复一些磁盘空间。

在单个IBDATA文件中,优化表对您无济于事。但是,在每个文件设置中,您通常可以通过执行此操作来重新获得一些磁盘空间。优化表将有效地重建整个表,从而消除了删除过程中碎片的未使用空间。

您可以通过运行显示表状态来查看哪些表可以从中受益。或者运行

select table_name, data_length, data_free from information_schema.tables
where engine='innodb' order by 3

使用最多的data_free优化表将为您提供磁盘空间中最大的节省。

但是有一些警告:

  • 优化期间,每个表将完全锁定。如果单独的桌子是10至100次演出,则不会很快
  • 优化后,您不应期望Data_free完全跌至0。由于InnoDB将空间分配为16K页面,因此仍然会有一些未使用的空间。
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top