Mysql空间释放

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cailongbiaoyuli/article/details/82591210

今天还原了一个数据库。发现数据量有数十GB,想着看看哪些表的数据量多,于是查询了下。数据还真不少。3000多万条,这儿一张表居然有近1400万数据。....惭愧。哈哈。以前没做什么处理。

USE information_schema;
SELECT table_name,table_rows FROM TABLES WHERE table_schema = 'tjpro' order by table_rows desc;
SELECT sum(table_rows) FROM tables WHERE table_schema = 'tjpro';
SELECT table_name,table_rows FROM tables WHERE table_schema = 'tjpro' order by table_rows desc limit 100;

原因是:

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

一、查询占用空间大小

删除了数据最多的mis_system_data_remind_mas 表之后。我再次查询该表占用的空间大小。

SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/1048576, TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename(你的表名)';

默认是M为单位。第二栏。约为2.8个GB。

然后清理一下。使用:OPTIMIZE TABLE

二、清理碎片

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

等待的时间有点长。

等完成后,再次查询空间:

SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/1048576, TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename(你的表名)';

可以看到,释放的空间约为2.8GB。

猜你喜欢

转载自blog.csdn.net/cailongbiaoyuli/article/details/82591210