mysql碎片化释放


清空MySQL测试库慢查询slow.log

数据库数据碎片化处理

参考文档:
https://www.cnblogs.com/wajika/p/6484125.html
https://www.cnblogs.com/xdot/p/5087865.html

问题

使用delete删除的时候,mysql并没有把数据文件删除,而是将数据文件的标识位删除,没有整理文件,因此不会彻底释放空间。被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,mysql会利用这些已删除的空间再写入。即删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。

解决办法

官方推荐使用 OPTIMIZE TABLE命令来优化表,该命令会重新利用未使用的空间,并整理数据文件的碎片。
Mysql可以使用如下命令查看

show table status [like table_name]

select table_schema, table_name, data_free, engine 
from information_schema.tables where table_schema not in ('information_schema', 'mysql') and data_free > 0

 
如果data_free为0 ,不需要处理,否则运行 optimize table [table_name]

 
注意:在OPTIMIZE TABLE运行过程中,MySQL会锁定表,尽量在不用测试数据库的时候偶操作
 
锁表处理
https://blog.csdn.net/zhaofuqiangmycomm/article/details/82150815
 
对照正在处理的(processlist)sleep任务和事务表来判断是否锁定了

原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/244778.html

(0)
上一篇 2022年4月17日
下一篇 2022年4月17日

相关推荐

发表回复

登录后才能评论