RDS for MySQL 空间问题的原因和解决

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: RDS for MySQL 空间问题的原因和解决   1. 原因 2. 解决 2.1 Binlog 文件 2.2 数据文件 2.3 临时文件 2.4 系统文件 RDS for MySQL 实例日常使用中随着实例的使用,会出现空间使用告警甚至超过实例限额被锁定的情况。 比如:   1. 原因 Binlog 日志文件占用高

RDS for MySQL 空间问题的原因和解决

 

1. 原因

2. 解决

2.1 Binlog 文件

2.2 数据文件

2.3 临时文件

2.4 系统文件


RDS for MySQL 实例日常使用中随着实例的使用,会出现空间使用告警甚至超过实例限额被锁定的情况。

比如:

 

1. 原因

  • Binlog 日志文件占用高

  • 数据文件占用高

  • 临时文件占用高

  • 系统文件占用高

实例空间使用情况可以在 RDS 控制台监控报警中查看:

2. 解决

RDS 实例支持单独升级磁盘空间,升级磁盘空间是解决空间问题的有效方式之一。下面说明不升级空间的情况下解决空间问题的方法。

2.1 Binlog日志文件

Binlog 文件记录实例的事务信息,是 RDS MySQL 实例 HA 架构以及高可用性、可恢复性的基础。是不可以关闭的。

RDS 实例会以一定时间间隔自动清理(上传到 RDS OSS 并从实例空间中删除)最近 18 小时外的 Binlog 文件。

如果短时间内实例 DML 操作生成了大量 Binlog 数据,有可能会导致超过实例磁盘空间上限而被锁定。

在这种情况下,可以通过控制台  备份与恢复  一键上传 Binlog 来清理(将 Binlog 文件上传到 RDS OSS 并从实例空间中删除)。

一 键上传 Binlog 会在后台异步提交清理任务,因此点击后会很快返回。清理任务会将完成写入的 Binlog(当前正在被写入的 Binlog 文件由于未完成写入,是不可以被清理的)上传到 RDS 的 OSS (非用户购买OSS)上后才会从实例空间中删除 Binlog 文件,因此会有一定延迟,建议点击后耐心等待一定时间,不建议非常多次点击该按钮。

注:对于实例由于 DML 等操作(比如涉及大字段的 DML 操作)导致快速生成 Binlog 的情况,可能会出现多次点击”一键上传 Binlog “ 按钮但是 Binlog 空间依旧上涨的情况,这是因为上传 Binlog 文件到备份空间并且从实例空间中删除的处理速度跟不上实例生成 Binlog 文件的速度,在这种情况下,建议考虑升级磁盘空间,并且排查 Binlog 快速生成的原因。

2.2 数据文件

对于数据文件占用空间高的情况,可以通过清理数据的方式来减少空间占用情况,比如通过 drop table truncate table 来清理不再需要的数据。

说明 3 个常见问题:

2.2.1 information_schema.tables 查询的数据容量

information_schema.tables 提供的是根据采样获取的表的部分统计信息,因此通过下面的查询获取的表、库数据尺寸和实际数据文件占用尺寸间会有出入(通常要小于实际数据文件占用空间)

select 
    table_name,
    concat(round((data_length + index_length) / 1024 / 1024,
                    2),
            ’MB’)
from
    information_schema.tables
where
    table_schema = 'rd_test'
        and table_name = 'large_tab_01';
AI 代码解读

 

下图中可以看到:在收集表的统计信息前后反馈出的表数据量大小存在差异。

spa_06.png

  • 注:
    即使通过 analyze table 命令,重新收集统计信息,得到的数值通常也小于实际数据文件占用空间;比如本例的 16143 MB 也小于该表的数据文件实际占用空间。

由于数据文件在频繁的 DML 后会出现数据空洞的现象,比较接近实际数据文件占用空间的计算方法请参考:

select 
    sum(data_length + index_length + data_free) / 1024 / 1024
from
    information_schema.tables;
AI 代码解读

 

  • 注:
    因为 information_schema.tables 中提供的是采样统计数据,因此该计算方式在统计数据比较接近实际的情况下,才会比较接近真实空间占用情况。

2.2.2 delete 删除数据

delete 操作不能够直接回收被删除数据占用的数据文件空间,这就好比排空泳池中水但泳池的占地面积不会发生改变一样。而且 delete 操作会生成相应的 Binlog 文件,会进一步恶化空间使用情况。

在 delete 操作删除数据后,需要通过 optimize table tab_name; 操作来回收空间。

2.2.3  删除备份

RDS 备份放置在后台 OSS 上,不占用用户的 RDS 实例空间,因此删除备份不能解决实例的空间问题。而且删除备份会影响实例的可恢复性,强烈建议任何情况下不要考虑删除备份。

2.3 临时文件

临时文件会随查询的结束或者会话的终止而自动释放,因此如果是临时文件导致实例空间满而锁定,可以通过终止会话来释放空间。

kill_sess_01.png

IOPS_13.png


2.4 系统文件

系统文件涉及到 ibdata1 系统表空间文件和 ib_logfile0、ib_logfile1 日志文件。

ibdata1文件:

InnoDB 引擎表由于支持多版本并发控制(MVCC),因此会将查询所需的Undo信息保存在系统文件 ibdata1 中。

如果存在对一个 InnoDB 表长时间不结束的查询,而且在查询过程中表有大量的数据变化,则会生成大量的 Undo 信息,导致 ibdata1文件尺寸增加。

由于 MySQL 内部机制的限制,ibdata1 文件目前是不支持收缩的。

因此出现这样的情况,在不升级磁盘空间的前提下,比较好的解决方法是在同地域同可用区购买相同配置的 RDS 实例,通过 DTS 工具将数据迁移到新实例中。

建议:监控和清理执行时间过长的会话或事务。

ib_logfile 日志文件:

ib_logfile0 和 ib_logfile1 日志文件保存 InnoDB 引擎表的事务日志信息,其文件大小尺寸固定,不可以改变。较大的尺寸在高并发事务的场景下有利于减少事务日志文件切换的次数,提高实例性能。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
305
分享
相关文章
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
【免费动手教程上线】阿里云RDS MySQL推出大容量高性能存储:高性能本地盘(最高16TB存储空间)、高性能云盘(最高64TB存储空间)
阿里云RDS MySQL提供高性能本地盘与高性能云盘等存储方案,满足用户大容量、低延迟需求。高性能本地盘单盘最大16TB,IO延时微秒级;高性能云盘兼容ESSD特性,支持IO性能突发、BPE及16K原子写等能力。此外,阿里云还提供免费动手体验教程,帮助用户直观感受云数据库 RDS 存储性能表现。
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
348 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
763 2
mysql 数据库空间统计sql
mysql 数据库空间统计sql
113 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
321 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。

推荐镜像

更多
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

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