【发布时间】:2025-12-18 12:35:01
【问题描述】:
我正在开发一个相对较小的应用程序,为大约 1,500 个用户提供服务,并在大约 300 兆的 Mysql 数据库上运行。整个系统在 AWS 上运行,有一个专用 EC2 节点在 Tomcat 8 上运行 Grails 应用程序和一个专用 Mysql RDS 实例。该系统已经在生产环境中运行了大约三年,没有出现数据库问题。两个最大的表包含大约 40k 条记录。该应用程序是使用 Grails 和 Java 1.7 构建的。
昨天我们的应用程序开始抛出以下异常,并带有以下错误消息:
“从存储引擎收到错误 28”
RDS 管理 Web 控制台提供的日志为空。
谷歌搜索没有发现任何有希望帮助我们解决问题的线索,除了大多数消息指出磁盘空间不足。鉴于大多数搜索结果是指磁盘空间。作为软件开发人员而不是具有丰富 Mysql 专业知识的 DBA,我们提升了 Mysql RDS 实例的存储空间。不幸的是,今天我们的应用程序仍然偶尔会抛出相同的异常。在创建了具有 15 gigs 空间的 Mysql DRS 实例之后——这比我们的应用程序使用的额外空间多几个数量级——我们不知道这个问题的根本原因是什么。我们的猜测是,我们可能遇到了一些开箱即用的 Mysql 限制,但不知道它可能是什么或如何解决它。事实上,我们托管 onRDS 的全部原因是为了避免此类问题。
做一些谷歌搜索,这似乎是一个有点常见的 Mysql 错误,但没有任何具体的线索可供我们遵循。大多数建议都是关于检查文件系统或“inode”空间。鉴于这是 AWS 上托管的 Mysql RDS 实例,我不确定是否或如何检查这些内容。查看 RDS 实例的 CloudWatch,我可以看到 CPU 处于空闲状态,并且该实例大大低于 15 gig 的存储限制。
有没有人对我们的调查有任何建议?
鉴于我们是 RDS 新手,您能否向我们指出任何文档,或者 - 更好的是 - 建议我们可以在 RDS 控制台中调整哪些设置 - 以帮助防止发生此错误?理想情况下,我们转移到 RDS 认为如果这是一个 mysql 大小或扩展问题,那么转移到 RDS 将解决问题。作为最后的手段,今天早上我们删除了大约 2 万行不重要的数据。不幸的是,问题仍然存在,我们继续遇到问题。
几个问题:
- 我们可以调整任何 RDS 设置来避免此问题吗?
- 能否通过迁移到更大的 RDS 实例(或许拥有更多内存)来解决此问题?
- 如果我们搬到 Aurora,我们会遇到这个问题吗?
【问题讨论】:
-
您的 RDS 磁盘总空间是多少,可用空间是多少?
-
我应该补充一点,我使用的是 db.t2.small 实例,cpu 为 0.83,内存为 930 MB,存储空间为 13,900 MB。和数据库引擎版本是默认的 5.6.27。要回答您的问题,我如何确定我的可用 RDS 光盘总空间?
-
错误 28 字面意思是“设备上没有剩余空间”。你熟悉
SHOW FULL PROCESSLIST;吗?EXPLAIN SELECT ...?您可能有一个失控的笛卡尔查询,它构建了一个巨大的临时表,然后它立即消失并在每次完成时再次释放空间。奇怪的是错误日志中没有任何内容,但您可能需要验证LOG_WARNINGS在您的参数组中设置为 2。
标签: mysql amazon-web-services grails amazon-ec2 amazon-rds