背景
在使用RDS的过程中,总是发现,我的数据库并没有使用那么多的空间啊,怎么空间就满/不够用了呢?
接下来,我们就看看我们的磁盘究竟使用在了哪儿了?
分析
1、RDS控制台查看空间详情
可以在RDS管理控制台-监控和报警,资源监控中查看存储空间详细的使用情况。
看了上面监控中的信息,好像信息统计也不是很准,我们还是不清楚数据差在哪儿啦,只是清楚磁盘被data/log/other/tmp占用了,具体是我哪些业务库表呢?我们接着往下看。
在RDS管理控制台-自治服务(DAS)-一键诊断-空间分析 中具体看下磁盘使用情况。
首先需要【重新分析】一下,确保数据的时效性。
在【空间分析】的【表空间】中,可以查看每个表的物理文件占用磁盘大小,以及是否存在较多的磁盘碎片,可以通过这里进行碎片整理。
2、SQL查看空间详情
如果可以登录实例后使用SQL查看具体的库表空间占用。
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)', \ sum(truncate(data_free/1024/1024,2))as'碎片空间(MB)' \ from information_schema.tableswhere table_schema='DB_NAME';-- 注:DB_NAME 需要使用真实的数据库名替换。
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)', \ truncate(data_free/1024/1024,2)as'碎片空间(MB)' \ from information_schema.tableswhere table_schema='DB_NAME';-- 注:DB_NAME 需要使用真实的数据库名替换;如果碎片空间过大,请执行optimize table 进行清理。
SELECT file_name,concat(TOTAL_EXTENTS,'M')as'FIle_size'FROM INFORMATION_SCHEMA.FILESorderby TOTAL_EXTENTS DESC;
具体的磁盘文件占用的信息中,处理基础的表空间(ibd)文件占用,还存在临时表和undo log文件占用,熟悉MySQL的朋友们都知道,这都是占用磁盘空间比较大的文件,确实也容易被我们忽略。
通过以下文件磁盘占用的命令输出,可以大概了解到实例磁盘空间占用的所有文件记录。
这里还是多加关注可能占用磁盘的数据,才能更加了解我们的数据库,enjoy RDS MySQL!