问题描述:
MySQL数据库中,做订单日志和权限日志得时候会记录很多信息,导致数据库的磁盘占用越来越多。而对于一些久远的日志数据其实可以清理调来释放磁盘使用空间得。但是清楚日志表数据后,磁盘空间并没有得到释放。
问题出现原因:
删除数据得sql语句如下:DELETE FROM ueb_logistics_rule_logs WHERE type=0 LIMIT 100,但凡是这样delete语句带有where条件得,MySQL会将删除的数据做为删除标记,而不是真正做物理删除。当然也也不会释放调磁盘空间。直接delete from table_name 是直接做物理删除,也会释放掉磁盘占用空间。
解决方案:
1、数据量小得情况下可直接用delete from table_name来删除数据,此操作会释放磁盘空间。
2、在数据量庞大得情况下,直接delete from table_name可能会因为MySQL负载而导致崩溃,建议在访问量小得时间段做轮询删除,删除操作执行完成之后再执行如下语句:OPTIMIZE TABLE table_name,官方给出得解释为:优化表/碎片整理/释放表空间。执行此操作后会删除该表下得数据碎片,也就是被标记得已删除数据。这样就释放掉磁盘空间了。