连接到同一 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
.005到0.090对我的应用程序的性能有很大影响(Magento),这只是一个简单的查询。如果执行更耗 CPU 的查询,这个数字可能会变得很高。有什么办法可以改善这种情况吗?
答案1
您正在将本地数据库与网络连接节点进行比较。在许多情况下,简单地协商 TCP 连接、身份验证过程和数据传输很容易耗费这 90 毫秒。您可以通过在客户端实现连接池来缓解这些结果,但数据传输的网络延迟仍然适用。
您还应该针对您的工作负载调整 RDS 实例,因为 RDS 默认设置非常通用,并不适合所有用例。查询缓存、连接超时、事务隔离级别……每当您的目标性能处于个位数毫秒级别时,所有这些都会严重影响您的查询。
请记住,RDS 只不过是在 EC2 实例上运行的标准 SQL 软件。如果您在 VPC 中部署 EC2 实例并安装 MySQL 以从 Magento 实例对其运行查询,那么只要您部署具有与 RDS 实例相当的资源的 EC2+EBS 设置,就应该可以获得相同的查询性能。根据我的经验,EC2 中的 RDS 和 MySQL 提供相同的性能,RDS“只是”自动执行典型的系统操作任务。