Amazon RDS 实例性能不佳

Amazon RDS 实例性能不佳

我正在对由小型 RDS 数据库实例支持的 PHP Web 应用程序进行一些负载/压力测试。当我使用约 50 个并发 Web 请求访问网站时,RDS 数据库会停止响应所有连接请求约 10 秒(来自我的 Web 应用程序以及我使用其他计算机的命令行 mysql 客户端)。PHP 给出以下错误:

Could not connect to database. Lost connection to MySQL server at 'reading initial communication packet', system error: 110

我以为这只是 Web 应用程序中 SQL 性能不佳/速度慢导致的,占用了大量资源,但这种性能似乎真的很糟糕,所以我深入挖掘了一下。我在 EC2 微型实例上设置了另一个 mysql 服务器,使用相同版本的 mysql、数据库克隆和默认配置。EC2 实例的性能好几倍(延迟和崩溃前的并发 Web 请求数)。

我的 RDS 实例和 EC2 实例使用相同版本的 mysql,采用默认配置,尽管我尝试调整 RDS 实例以增加各种缓冲区、max_connections 和 max_connection_errors,但都无济于事。

怎么回事?为什么具有更好的“磁盘” I/O、3 倍 RAM 和更多专用 CPU 的 RDS 实例的性能会比弱小的 EC2 实例更好?

我怀疑这要么是 AWS 怪癖,要么是 MySQL/RDS 配置问题 - 希望这两个主题上的专家可以阐明这个问题...谢谢!

答案1

我们在使用小型 RDS 实例时遇到的问题之一是连接数设置。这是一个基于 RAM 的公式 - 并且它只允许在小型数据库上建立约 150 个连接。这是我首先要考虑的事情。

SHOW PROCESSLIST;

将是命令。如果您的应用程序中没有使用某种连接池,我可以看到很快就会达到该限制。

虽然这只是一次冒险,但无论如何祝你好运!

答案2

您需要创建一个“DB 参数组”,然后使用命令行工具来编辑设置:AWS RDS 部署指南

相关内容