Mysql 碎片优化,ibd文件过大优化

一、ibd文件

    我们知道ibd文件是每个数据库里面每个表的数据空间,每个表的数据和索引都会存在自已表空间中。然后建库建表,插入数据,使该表的ibd文件增大

  在使用mysql的时候有时候,可能会发现尽管一张表删除了许多数据,但是这张表表的数据文件和索引文件却奇怪的没有变小。这是因为mysql在删除数据(特别是有Text和BLOB)的时候,会留下许多的数据空洞/碎片,这些空洞会占据原来数据的空间,所以文件的大小没有改变。这些空洞在以后插入数据的时候可能会被再度利用起来,当然也有可能一直存在。这种空洞不仅额外增加了存储代价,同时也因为数据碎片化降低了表的扫描效率。

二、查询表的情况

show table status like 'user' \G 

   \G 的作用:是将查到的结构旋转90度变成纵向

  Name 表名

      Engine    表的存储引擎,在旧版本中,该列的名字叫做 Type,而不是 Engine。

 Version 表的 .frm 文件的版本号。

   Row_format   行的格式。对于 MyISAM 表,可选的值为 Dynamic、Fixed 或者 Compressed。

   Dynamic 的行长度是可变的,一般包含可变长度的字段,如 VARCHAR 或者 BLOB。

    Fixed 的行长度则是固定的,值包含固定长度的列,如 CHAR 和 INTEGER。

   Compressed 的行则只在压缩表中存在,压缩表是不能够修改的(除非先将表解除压缩,修改数据,然后再次压缩),压缩表可以极大的减少磁盘空间占用,一次也可以减         少磁盘 I/O,从而提升查询性能。压缩表也支持索引,但索引也是只读的。

   Rows    表中的行数。对于 MyISAM 和其他的一些存储引擎,该值是精确的,但对于 InnoDB,该值是估计值。

 Avg_row_length     平均每行包含的字节数。

   Data_length    表数据的大小(以字节为单位)。

    Max_data_length  表数据的最大容量,该值和存储引擎有关。

   Index_length   索引的大小(以字节为单位)。

   Data_free    对于 MyISAM 表,表示已分配但目前没有使用的空间。这部分空间包括了之前删除的行,一级后续可以被 insert 利用到的空间。

   Auto_increment  下一个 auto_increment 的值。

  Create_time   表的创建时间。

  Update_time   表数据的最后修改时间。

  Check_time   使用 check table 命令货值 myisamchk 工具最后一次检查表的时间。

  Collation   默认字符集和字符列排序规则。

  Checksum  如果启用,保存的是整个表的实时校验和。

  Create_options   创建表指定的其他选项。

   Comment    该列包含了一些其他的额外信息。对于 MyISAM 表,保存的是表在创建时带的注释。对于 InnoDB 表,则保存的是 InnoDB 表空间的剩余空间信息。如果是一个视图,则该列包含 “VIEW” 的文本字样。

三、优化方式

   非InnoDB表优化:  OPTIMIZE TABLE ds_log_detail;
       优化整理碎片,会锁表操作,建议要避开业务时间操作。

   MySQL 5.7之后的innodb表推荐使用ALTER TABLE ds_log_detail ENGINE=InnoDB;来对表空间碎片进行优化。

   优化以后会释放所有碎片和索引

 

posted on 2022-10-03 09:47  topguntopgun  阅读(1643)  评论(0编辑  收藏  举报

导航