mysqlcheck 优化 innodb 表——性能/调度

jwg*_*g2s 4 mysql innodb myisam

我正在尝试优化非常大的生产数据库服务器上的表。我正在寻找有关某些大小的数据库/表需要多长时间的统计数据或基准。

是否有某种乘数使用数据库/表大小来计算需要多长时间?

我的总数据库大约是 90GB。

运行SHOW VARIABLES LIKE 'innodb_file_per_table';表明innodb_file_per_tableon

Ric*_*mes 10

不要优化。

说真的,几乎不需要优化 InnoDB 表。90GB 需要数小时,甚至数天,具体取决于可调参数、磁盘速度、RAID 等。

OPTIMIZE可能会释放一些由 DELETE 和 UPDATE 引起的可用空间。但是,通常情况下,InnoDB 会照顾好自己,很少让超过 50% 的磁盘空间“空闲”。正常的随机插入(在数据或二级索引中)导致平均 31% 的“免费”——这是 BTrees 的数学事实。

如果你的表分区(你必须优化),做一个分区在同一时间,也没有使用进行优化。有一个错误,无论您说什么,它都会执行整个表格。REORGANIZE PARTITION 可以做单个分区。

请注意,非小型 InnoDB 表通常总是在 SHOW TABLE STATUS 中显示 4MB-7MB 的“Data_free”。如果那个“浪费”的空间,你就无法摆脱。

OPTIMIZE不会重新排列数据或二级索引——行将继续以完全相同的顺序排列。(这与 MyISAM 不同,MyISAM 有多种原因进行 OPTIMIZE。)

警告:大多数 ALTER、OPTIMIZE 等都需要足够的备用磁盘空间来创建该表的完整新副本——多 90GB。

如果你想提供更多关于你为什么要优化的细节,我会看看是否有充分的理由。请提供显示创建表和显示表状态。甚至可能是一种无需停机即可避免它的技术。