改进与EC2的亚马逊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 

但连接到我的亚马逊RDS实例在同一个可用区给我这个

 +--------------------+ | Database | +--------------------+ | information_schema | | biblical | | mysql | | performance_schema | | phpmyadmin | | shop | +--------------------+ real 0m0.090s user 0m0.000s sys 0m0.000s 

.0050.090对我的应用程序的性能( Magento )有很大的影响,这是一个简单的查询。 如果执行更多的CPU密集型查询,这可能会很高。 反正有改善呢?

您正在比较本地数据库与networking连接节点。 简单地谈判一个TCP连接,身份validation过程和数据传输可以很容易地在很多情况下吃90毫秒。 您可以通过在客户端实施连接池来缓解这些结果,但数据传输的networking延迟仍然适用。

您还应该为您的工作负载调整RDS实例,因为RDS默认设置非常通用,不适合所有用例。 查询caching,连接超时,事务隔离级别…所有这些都会在您的目标性能达到单位数级别时严重影响您的查询。

请记住,RDS只不过是在EC2实例上运行的标准SQL软件。 如果您在VPC中部署EC2实例,则安装MySQL以从您的Magento实例运行您的查询,您应该期望在您将具有可比较资源的EC2 + EBS设置部署到您的RDS实例时具有相同的查询性能。 根据我的经验,EC2中的RDS和MySQL提供相同的性能,RDS“简单”自动执行典型的系统操作任务。