当发现数据库的容量很诡异的时候...

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

今天接收到金山云的报警邮件,说有一个数据库出现了容量紧张的情况,我登上控制台一看,如图:

wKioL1loiCXgGB6SAACXZomq3kM185.png


然后我登陆mysql client,在命令行里查询数据库的大小却是得到这样的值:

wKiom1loiLKwO2BxAABbHpW1Cn8153.png


再用“select sum(data_length + index_length + data_free) / 1024 / 1024 from information_schema.tables;”这个语句来查看,结果如图:

wKiom1lsYLDA5jjpAABGioaANnM807.png

由于数据文件在频繁的 DML 后会出现数据空洞的现象,所以下面这个语句其实更准一丢丢,两者差不多都是71G左右,与控制台网页说的占用了90G相差了近乎20个G,那么差距在哪里呢?


其实很简单,上面两个语句查的都是数据文件的大小,但是数据文件大小并不等于数据库里全部内容的大小,因为数据库的“存储空间”里还是有其他的文件的。


在命令行使用“show binary logs;”看看binlog的情况,插播一句,binlog 文件记录实例的事务信息,是 RDS MySQL 实例 HA 架构以及高可用性、可恢复性的基础,是不可以关闭的。我粗略的算了一下binlog文件大约有5G左右,与控制台显示的90G容量还是有15G左右的出入。这个时候,我记得曾经看过这样一句话:“如果存在对一个 InnoDB 表长时间不结束的查询,而且在查询过程中表有大量的数据变化,则会生成大量的 Undo 信息,导致 ibdata1文件尺寸增加。由于 MySQL 内部机制的限制,ibdata1 文件目前是不支持收缩的。


于是就要查询一下ibdata文件的大小,但是由于我是mysql client,而查询ibdata是要使用innochecksum命令在mysql server段操作的,于是就拜托金山的售后帮忙查询一番,金山那边查了一下,告诉我ibdata文件的大小是144M,在那消失的15G面前完全就是忽略不计。


这里再额外说一句,ibdata文件不大就说明数据库的慢操作很少,运行状态还算正常。


这时,我就详细查了一下里面每一个tables的情况,使用语句:

1
2
3
4
5
6
7
SELECT CONCAT(table_schema, '.' ,table_name) AS  'Table Name' ,   
     table_rows AS  'Number of Rows' ,   
     CONCAT(ROUND(data_length/(1024*1024*1024),6), ' G' ) AS  'Data Size' ,   
     CONCAT(ROUND(index_length/(1024*1024*1024),6), ' G' ) AS  'Index Size'  ,   
     CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),6), ' G' ) AS 'Total'  
FROM information_schema.TABLES   
WHERE table_schema LIKE  '要查询的数据库名' ;

效果如下:

wKiom1lsZqPB1ULuAAHEsKIgfps518.png


然后又麻烦金山方面du了一下数据大小的具体分布,做容量的对比,金山反馈的结果如图:

wKioL1lojV6yJxA2AAAPxHc1w1I046.png


两边的值相差不大,而这些值七七八八加起来是84.6G,再加上binlog日志的5个G,就差不多有90个G了,至此数据库容量偏差之谜就算解开了。


参考资料:https://linux.cn/article-5829-rss.html

参考资料: http://blog.chinaunix.net/uid-24373487-id-4223322.html 




 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1947643

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
视觉智能开放平台产品使用合集之人脸数据库容量是否支持扩容
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
视觉智能开放平台产品使用合集之人脸数据库容量是否支持扩容
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
MySQL查看数据库表容量大小
MySQL查看数据库表容量大小
218 0
数据库容量考虑因素
一、数据库需求分析 1.1 数据类型 1.2 数据量预测 1.3 数据增长速度 二、数据库性能需求 2.1 响应时间 2.2 吞吐量 2.3 并发处理能力 三、数据库成本考虑 3.1 硬件成本 3.2 软件成本 3.3 人力成本 四、数据库扩展性考虑 4.1 升级路径 4.2 兼容性 4.3 容灾备份方案
156 0
SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式
SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式 SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式:   1.
1489 0
阿里云数据库助力智启蓝墨实现在线大容量存储与分析
阿里云数据库助力智启蓝墨实现在线大容量存储与分析
1322 0
阿里云数据库助力智启蓝墨实现在线大容量存储与分析

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等