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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

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

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
相关文章
|
10月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之人脸数据库容量是否支持扩容
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
115 3
|
10月前
|
存储 移动开发 数据库
视觉智能开放平台产品使用合集之人脸数据库容量是否支持扩容
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
10月前
|
SQL 关系型数据库 MySQL
MySQL查看数据库表容量大小
MySQL查看数据库表容量大小
241 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 容灾备份方案
172 0
|
SQL 数据库 数据库管理
SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式
SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式 SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式:   1.
1500 0
|
存储 自然语言处理 NoSQL
内存数据库容量极致优化赛题解析 | 学习笔记
快速学习内存数据库容量极致优化赛题解析
内存数据库容量极致优化赛题解析 | 学习笔记
|
存储 人工智能 分布式计算
阿里云数据库助力智启蓝墨实现在线大容量存储与分析
阿里云数据库助力智启蓝墨实现在线大容量存储与分析
1346 0
阿里云数据库助力智启蓝墨实现在线大容量存储与分析
|
运维 关系型数据库 分布式数据库
如何实现高容量大并发数据库服务 | 数据库分布式架构设计
袋鼠学院和优云、阿里云联合举办的沙龙结束之后,总是有小伙伴们来问PPT内容,想要进一步了解Topic内容。(哦,对了对了,竟然还有小伙伴专门冲着袋鼠云去听沙龙,感动cry~~) 千呼万唤,忙成狗的袋鼠小妹终于把沙龙总结整理了出来(⊙o⊙) 本次沙龙的主题是“云时代下的运维管理实践”,受邀请的演讲嘉宾,花名宏翊(经常关注袋鼠云的同学,肯定已经对这个名字很熟悉了),是袋鼠云首席数据库架构师,袋鼠学院数据库讲师。
6983 0

热门文章

最新文章