MySQL数据库空间爆满 实际数据占用空间远低于磁盘空间

一、问题:阿里云RDS空间突然爆满。

今天阿里云RDS MySQL数据空间突然满了,查了下实际数据占用空间远低于磁盘空间,记录一下解决方法。

二、问题点确认:数据库空间占用查询

1. 查询数据库磁盘空间占用情况(通过查询发现实际使用空间远低于磁盘使用空间)

-- 查询各表占用空间情况
  SELECT
	table_schema as '数据库',
	table_name as '表名',
	truncate(data_length/1024/1024, 2) as '数据空间(MB)',
	truncate(index_length/1024/1024, 2) as '索引空间(MB)',
	truncate(data_free/1024/1024, 2) as '碎片空间(MB)',
	table_rows as '表行数'
  FROM information_schema.tables
  WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
  ORDER BY data_length DESC,index_length DESC;

-- 查询各库占用空间情况
  SELECT
       table_schema as '数据库',
       table_name as '表名',
       truncate(data_length/1024/1024, 2) as '数据空间(MB)',
       truncate(index_length/1024/1024, 2) as '索引空间(MB)',
       truncate(data_free/1024/1024, 2) as '碎片空间(MB)',
       table_rows as '表行数'
  FROM information_schema.tables
  WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
  ORDER BY data_length DESC,index_length DESC;
  

2. 查询MySQL表空间数据文件的信息(通过查询发现.ibd占用了大量空间)

SELECT file_name,concat(TOTAL_EXTENTS,'MB') as 'FileSize' FROM INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS DESC

在这里插入图片描述
FTS_00000000000008c6_000000000000111d_INDEX_1~6.ibd是全文索引产生的文件

三、问题解决:优化表空间(对加了全局索引的表进行优化)

执行下面语句进行优化(optimize table语句会导致锁表,建议在业务低峰期操作。)

optimize table <表名>;

1、OPTIMIZE TABLE语句可以重新组织表、索引的物理存储,减少存储空间,提高访问的I/O效率。类似于碎片整理功能
2、另外使用delete语句删除数据时,delete语句只是将记录的位置或数据页标记为了“可复用”,但是磁盘文件的大小不会改变,即表空间不会直接回收。此时您可以通过optimize table语句释放表空间。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL占用磁盘空间的大小取决于数据库中存储的数据量以及表结构、索引等因素。以下是一些可能导致MySQL占用大量磁盘空间的原因和解决方法: 1. 数据库中存储的大量数据:如果数据库中存储了大量数据,那么MySQL占用磁盘空间也会相应增加。可以通过删除不必要的数据,或者对数据进行压缩等方式来减少占用磁盘空间。 2. 索引占用空间MySQL中的索引也会占用磁盘空间。如果表中有大量的索引,那么它们可能会占用相当大的磁盘空间。可以通过删除不必要的索引、优化索引等方式来减少索引占用磁盘空间。 3. 未正确清除日志:MySQL中的日志文件也会占用磁盘空间。如果未正确清除日志文件,它们可能会占用相当大的磁盘空间。可以通过定期清除日志文件、设置合适的日志文件大小等方式来控制日志文件占用磁盘空间。 4. 慢查询日志:如果开启了慢查询日志,那么它们也会占用磁盘空间。可以通过定期清除慢查询日志、设置合适的日志文件大小等方式来减少慢查询日志占用磁盘空间。 5. 数据库备份:如果定期备份数据库,那么备份文件也会占用磁盘空间。可以通过删除不必要的备份文件、压缩备份文件等方式来减少备份文件占用磁盘空间。 综上所述,可以通过删除不必要的数据和索引,定期清除日志和慢查询日志,删除不必要的备份文件等方式来减少MySQL占用磁盘空间

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值