今天早上,业务库磁盘告警了,之前我们有聊过如何对web服务器磁盘告警的处理,今天我们来讲一下如何处理DB实例磁盘告警,最常见的处理方法有如下几种:
磁盘扩容,现在大部分公司的业务都使用了各种云的Paas产品,直接界面扩容即可。
对数据进行归档,常见的是对一些日志表的处理,比如只保留最近三个月或半年或一年的数据,其他过往数据都归档到一个冷备库中。
清理数据,比如业务上的一些bug导致的短时间内业务数据量增长过快的情况。
迁移数据,比如把告警的DB实例上一些库迁往另一个DB实例。
不管用哪种方式,首先我们都需要了解一下DB库里究竟是哪些表比较占空间,这样才比较好,因为很有可能是因为某个不合理的业务点导致某个表过大,从而引起磁盘告警,这样从优化业务的角度去从根本上解决磁盘告警的问题。
那么我们首先要找到某个库或者某个表占用比较大,我今天遇到的是告警实例就一个业务库,那我可以通过以下几种方式来获取占用比较大的表:
1.通过Phpmyadmin size字段排序查看哪个表占用过大

2. 通过SQL 来获取占用空间大小的表的排序
SELECTTABLE_NAME,concat(truncate(data_length/1024/1024,2),' MB') as data_size,concat(truncate(index_length/1024/1024,2),' MB') as index_sizeFROM information_schema.tablesWHERE TABLE_SCHEMA = '库名' GROUP BY TABLE_NAME ORDER BY data_length desc
+--------------------------------+-----------+------------+| TABLE_NAME | data_size | index_size |+--------------------------------+-----------+------------+| xxxxxxxxxxxxxxxxx | 499.08 MB | 95.03 MB || yyyyyyyyyyyyyyyyy | 101.96 MB | 19.13 MB || zzzzzzzzzz | 63.49 MB | 14.32 MB || ddddddddddddddddddddd | 56.97 MB | 30.93 MB || eeeeeeee | 52.17 MB | 12.31 MB || fffffffffffffffffffff | 39.94 MB | 0.00 MB || gggggggggggggggg | 37.22 MB | 21.50 MB |
3. 如果有多个数据库想查询所有数据库占用空间大小:
SELECTTABLE_SCHEMA,concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size,truncate(sum(data_length)/1024/1024,2) as data_size2,concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_sizeFROM information_schema.tables GROUP BY TABLE_SCHEMA ORDER BY data_size2 desc
+--------------------+--------------+------------+------------+| TABLE_SCHEMA | data_size | data_size2 | index_size |+--------------------+--------------+------------+------------+| database1 | 926887.93 MB | 926887.93 | 37913.96MB || database2 | 2.72 MB | 2.72 | 0.21MB || database3 | 0.17 MB | 0.17 | 0.00MB || database4 | 0.14 MB | 0.14 | 0.00MB || performance_schema | 0.00 MB | 0.00 | 0.00MB |+--------------------+--------------+------------+------------+5 rows in set, 48 warnings (0.07 sec)
当我们找到某张表磁盘占用过大时,我们可以通过写脚本的方式来完成数据清理工作(我今天遇到的就是可以清理的情况),这里需要注意的是最好不要一次性删除过多记录,或者短时间删除过多记录,这样有可能会导致从库延迟加大,或者引起线上服务故障。所以稳妥的方式是在系统闲时,通过间歇式少量多次删除表记录,最后清完记得optimize table。
以上就是当一个DB实例磁盘告警时的一些处理思路。
最后修改时间:2022-03-08 10:18:42
文章转载自码农漫谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




