改善从 EC2 到 Amazon RDS 的连接

改善从 EC2 到 Amazon RDS 的连接

连接到同一 EC2 实例上的本地数据库的延迟较低,但对于 RDS 来说,延迟非常高。请参阅下面的结果。

time mysql -u root -proot -h localhost -e 'show databases'

+--------------------+
| Database           |
+--------------------+
| information_schema |
| biblical           |
| mysql              |
| performance_schema |
| phpmyadmin         |
| shop               |
+--------------------+

real    0m0.005s
user    0m0.003s
sys 0m0.000s

但连接到同一可用区域中的 Amazon RDS 实例时,会出现此问题

+--------------------+
| Database           |
+--------------------+
| information_schema |
| biblical           |
| mysql              |
| performance_schema |
| phpmyadmin         |
| shop               |
+--------------------+

real    0m0.090s
user    0m0.000s
sys 0m0.000s

.0050.090对我的应用程序的性能有很大影响(Magento),这只是一个简单的查询。如果执行更耗 CPU 的查询,这个数字可能会变得很高。有什么办法可以改善这种情况吗?

答案1

您正在将本地数据库与网络连接节点进行比较。在许多情况下,简单地协商 TCP 连接、身份验证过程和数据传输很容易耗费这 90 毫秒。您可以通过在客户端实现连接池来缓解这些结果,但数据传输的网络延迟仍然适用。

您还应该针对您的工作负载调整 RDS 实例,因为 RDS 默认设置非常通用,并不适合所有用例。查询缓存、连接超时、事务隔离级别……每当您的目标性能处于个位数毫秒级别时,所有这些都会严重影响您的查询。

请记住,RDS 只不过是在 EC2 实例上运行的标准 SQL 软件。如果您在 VPC 中部署 EC2 实例并安装 MySQL 以从 Magento 实例对其运行查询,那么只要您部署具有与 RDS 实例相当的资源的 EC2+EBS 设置,就应该可以获得相同的查询性能。根据我的经验,EC2 中的 RDS 和 MySQL 提供相同的性能,RDS“只是”自动执行典型的系统操作任务。

相关内容