MySQL5.7新特性之数据碎片整理

  对于innodb存储引擎,例如删除一行,这些行只是标记为“已删除”,而不是真正从索引中物理删除了,因而空间也没有真正得到释放。Innodb的Purge线程会异步的来清理这些没有用的索引键和行,但是依然没有把这些释放出来的空间给系统用,因而会导致页面中存在很多空洞。
  MySQL5.7之前的版本中,需要使用OPTIMIZE TABLE或者ALTER TABLE TABLE_NAME ENGINE=InnoDB(比如为独立表空间),改方法相当于新建一个表,进行一次导出/导入,然后删除旧表。
  MySQL5.7版本中,合并了Facebook的碎片整理代码,需要把下面的配置加到my.cnf配置文件中:
[mysqld]
innodb_defragment=1
#打开或者关闭InnoDB碎片整理算法。
innodb_defragment_n_pages=16
#一次性读取多少个页面进行合并整理操作。范围是2-32,默认值是7
  这样配置之后,新的碎片整理功能就会替代原有的OPTIMIZE TABLE算法,加快了碎片整理的时间,也不会有新的表生成。
  以下是状态参数说明:
Innodb_defragment_compression_failures:整理碎片时候重新压缩页面失败的次数
Innodb_defragment_failures:整理操作失败的次数(如果有可压缩的页面)
Innodb_defragment_count:整理操作的次数

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30135314/viewspace-2144541/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30135314/viewspace-2144541/

你可能感兴趣的:(MySQL5.7新特性之数据碎片整理)