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

本文涉及的产品
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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
存储 分布式计算 容灾
数据库容量考虑因素
一、数据库需求分析 1.1 数据类型 1.2 数据量预测 1.3 数据增长速度 二、数据库性能需求 2.1 响应时间 2.2 吞吐量 2.3 并发处理能力 三、数据库成本考虑 3.1 硬件成本 3.2 软件成本 3.3 人力成本 四、数据库扩展性考虑 4.1 升级路径 4.2 兼容性 4.3 容灾备份方案
61 0
|
存储 Oracle 关系型数据库
数据库容量和内存测算的一些想法
前言:本文档主要针对数据库的容量和性能估算,结合网上的一些文章,整理如下:   一、数据库容量的计算 1、数据库容量核心分析对象是数据库表,及配合数据库表的包括视图、索引、日志等相关的附属信息。
1425 0
|
3天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
23 0
|
3天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
11 0
|
3天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
15 0
|
3天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
24 0
|
3天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
24 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
3天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
19 0
|
3天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
24 0