Mysql 如何统计估计/解决InnoDB表中页面的碎片空间量

在InnoDB上,碎片可能是一个问题。DBA希望观察这个表实际上是否有碎片。InnoDB没有一种直接的方法来估计碎片空间量。本文档描述了如何使用信息模式来估计碎片空间的大小。

information_schema.TABLES

information_schema.TABLES中的值,是存储在磁盘上的表的统计信息。

SELECT TABLE_SCHEMA as `db`, TABLE_NAME as `tbl`, 1-(TABLE_ROWS*AVG_ROW_LENGTH)/(DATA_LENGTH + INDEX_LENGTH + DATA_FREE) AS `fragment_pct`, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'greatsql' AND TABLE_ROWS >= 10000 ORDER BY fragment_pct DESC, TABLE_ROWS DESC;