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

本文涉及的产品
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
相关文章
|
7天前
|
关系型数据库 数据库
|
10月前
|
存储 分布式计算 容灾
数据库容量考虑因素
一、数据库需求分析 1.1 数据类型 1.2 数据量预测 1.3 数据增长速度 二、数据库性能需求 2.1 响应时间 2.2 吞吐量 2.3 并发处理能力 三、数据库成本考虑 3.1 硬件成本 3.2 软件成本 3.3 人力成本 四、数据库扩展性考虑 4.1 升级路径 4.2 兼容性 4.3 容灾备份方案
69 0
|
存储 自然语言处理 NoSQL
内存数据库容量极致优化赛题解析 | 学习笔记
快速学习内存数据库容量极致优化赛题解析
108 0
内存数据库容量极致优化赛题解析 | 学习笔记
|
SQL 数据库 数据库管理
SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式
SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式 SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式:   1.
1374 0
|
存储 人工智能 分布式计算
阿里云数据库助力智启蓝墨实现在线大容量存储与分析
阿里云数据库助力智启蓝墨实现在线大容量存储与分析
1264 0
阿里云数据库助力智启蓝墨实现在线大容量存储与分析
|
关系型数据库 Java 数据库连接
SQLServer · 最佳实践 · 数据库实现大容量插入的几种方式
title: SQLServer · 最佳实践 · 数据库实现大容量插入的几种方式 author: 石沫 背景 很多用户在使用阿里云云数据库SQL Server时,为了加快插入速度,都尝试使用大容量插入的方式,大家都知道,对于完整恢复模式下的数据库,大容量导入执行的所有行插入操作都会完整地记录
2473 0
|
存储 Oracle 关系型数据库
数据库容量和内存测算的一些想法
前言:本文档主要针对数据库的容量和性能估算,结合网上的一些文章,整理如下:   一、数据库容量的计算 1、数据库容量核心分析对象是数据库表,及配合数据库表的包括视图、索引、日志等相关的附属信息。
1445 0
|
4天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!

热门文章

最新文章