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) 编辑 收藏 举报