起因:

数据表中保存日志信息比较多,一个表站用好几个G的空间,想清理掉三个月以前的数据,但清理后发现物理磁盘站用空间并没有减少。

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

官方推荐使用 OPTIMIZE TABLE命令来优化表,该命令会重新利用未使用的空间,并整理数据文件的碎片。
语法如下:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …

注:该命令将会整理表数据和相关的索引数据的物理存储空间,用来减少占用的磁盘空间,并提高访问表时候的IO性能。但是,具体对表产生的影响是依赖于表使用的存储引擎的。该命令对视图无效。
该命令目前只对MyISAM、InnoDB,ARCHIVE的表起作用,其余引擎的不起作用

执行命令:
OPTIMIZE TABLE tableName;

查看数据表站用磁盘空间查询语句

1、查看指定数据库指定表容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql' AND table_name='help_topic'
order by data_length desc, index_length desc;

2、查看指定数据库各表容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql'
order by data_length desc, index_length desc;

3、查看指定数据库容量大小

select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql';

4、查看所有数据库各表容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;

5、查看所有数据库容量大小

select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;

补充:

1、如何使optimize 支持其他引擎?
默认情况下,optimize不支持其他存储引擎,但是可以在启动mysqld的时候,使用 --skip-new 参数,这种情况下,optimize命令,将会被映射到alter table命令上,实现上述的功能。

2、该物理删除还是逻辑删除?
生产环境下,尽量不要用物理删除,一旦物理删除了,意味着数据恢复就会很麻烦。建议逻辑删除,数据仍存储在DB里。如果数据量很大的时候,可以考虑使用分库分表。但,这个仍旧是需要根据业务场景来。

3、optimize执行时会将表锁住,所以不要在高峰期使用。也不要经常使用,每月一次就足够了

MYSQL Delete删除数据后物理磁盘空间未减少解决相关推荐

  1. MySQL delete删除数据后,释放磁盘空间

    当 MySQL 数据库服务删除部分数据后:有些情况下这些数据占用的存储空间会释放掉,有些情况这些存储空间则不会释放.以下是对这种情况的简单说明: 一.删除表|清空数据表 当执行删除数据表或者清空数据表 ...

  2. mysql 释放空间_Mysql InnoDB删除数据后释放磁盘空间的步骤详解

    Mysql InnoDB删除数据后释放磁盘空间的方法 Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长. 如果在创建数据库的时候 ...

  3. MongoDB删除数据后释放磁盘空间

    由于mongodb的机制,通过remove删除collection中的数据后,磁盘空间并没有得到释放,想要释放空间需要删除数据库 官网上说可以使用db.repairDatabase(),但这会导致停机 ...

  4. mysql删除数据后释放磁盘空间

    drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM : truncate table table_name立刻释放磁盘空间 ,不管是 Innodb和My ...

  5. Linux删除文件,df查看磁盘空间未减少

    问题场景 当服务器某个路径磁盘使用率过高时,需要清理磁盘,但是rm删除大文件后,df查看磁盘空间并没有减少,但du查看显示磁盘空间已经减少 分析原因 某个进程正在连接着被删文件,空间未被释放,需要将该 ...

  6. MySQL删除数据后,释放磁盘空间

    drop table table_name  立刻释放磁盘空间 , Innodb和MyISAM: truncate table table_name 立刻释放磁盘空间, Innodb和MyISAM,t ...

  7. ElasticSearch删除数据后释放磁盘空间

    问题:公司es 几百万数据量,删到只剩30万数据量,数据磁盘并没有变少多少. 经过查询才知道删除文档并没有真正删除,仅作了删除标记,从而不能再被搜索到.要想释放磁盘的空间,要使用forcemerge命 ...

  8. mysql 空位补0_MySQL 删除数据后物理空间未释放

    MySQL 删除数据后物理空间未释放 1. 进入数据库目录: cd  /var/lib/mysql/ 2. 备份要保存的数据库文件(切记!必须备份!部分数据库文件需要恢复!) mysqldump -h ...

  9. mysql删除数据后id自增不连续的解决方法

    mysql删除数据后id自增不连续的解决方法 参考文章: (1)mysql删除数据后id自增不连续的解决方法 (2)https://www.cnblogs.com/weifeng-888/p/1163 ...

最新文章

  1. java转python
  2. Android 中文 API 文档 (45) —— AbsoluteLayout.LayoutParams
  3. 固态器件理论(2)价和晶体结构
  4. 【 C 】关于变量、地址、指针变量等关系的一点思考
  5. Ant编译、FatJar编译方式
  6. python常用的十进制、16进制之间的转换
  7. secilog 1.17 发布 增加了英文版本等新功能
  8. linux vim命令_提升生产力的20大Linux Vim命令
  9. 2018年大学生设计竞赛浙江赛区C题-无线充电电动小车-试题分析
  10. fiddler抓包视频
  11. win7上搭建ftp站点
  12. python人民币和美元转换-【菜鸟学Python】案例一:汇率换算
  13. 001.flink内存分配机制
  14. STM32单片机语音声控智能台灯可调光冷暖光人检测锂电池供电太阳能和USB充电
  15. 单片机可以用python编程吗,python可以单片机编程吗
  16. nasm汇编器的安装与基本使用方法
  17. Skype for Business Server 2015-13-IISARR-2-发布-3-OWAS
  18. CST入门——边界条件Boundary的选择与设置
  19. 3B大战 GS很受伤
  20. ISP——LSC(Lens Shading Correction)

热门文章

  1. 模拟开关/多路复用器(CH442E)
  2. 数据库授权与收回 4.13数据库课程
  3. 计算机基础知识点归纳会计,会计专业知识总结.doc
  4. ‘setuptools‘ is a dependency of conda and cannot be removed from
  5. Nginx+Tomcat负载均衡、动静分离,4层代理,7层代理
  6. 【LoadRunner】The above not found error(s) may be explained by header and body byte counts being 0 .
  7. 在win7下用vs2008 编译程序时出现“mt.exe停止工作”问题的解决办法
  8. 学校信息系统、计算图形面积、计算车重C++(继承与派生)在线作业
  9. 相控阵天线分析综合、设计与测试
  10. 引导页源码 - 彩虹云任务引导页模板