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会锁定表,尽量在不用测试数据库的时候偶操作
锁表处理
对照正在处理的(processlist)sleep任务和事务表来判断是否锁定了