Mysql 计数查询导致的Amazon RDS CPU利用率

Mysql 计数查询导致的Amazon RDS CPU利用率,mysql,cpu,cpu-usage,rds,Mysql,Cpu,Cpu Usage,Rds,我已经在Amazon EC2(新加坡地区)上发布了我的网站,并在同一地区使用MySQL RDS媒体实例进行数据存储 在我的例子中,大多数select查询都有一些计数功能。这些查询显示的结果非常慢。我已经在表上创建了适当的索引,并检查了EXPLAIN命令来分析这些查询。它告诉我,为了得到结果,必须进行全表扫描 在我的RDS medium实例上,我已使用以下设置配置了自定义参数组 log_queries_not_using_index = true, slow_query_log = true, l

我已经在Amazon EC2(新加坡地区)上发布了我的网站,并在同一地区使用MySQL RDS媒体实例进行数据存储

在我的例子中,大多数select查询都有一些计数功能。这些查询显示的结果非常慢。我已经在表上创建了适当的索引,并检查了EXPLAIN命令来分析这些查询。它告诉我,为了得到结果,必须进行全表扫描

在我的RDS medium实例上,我已使用以下设置配置了自定义参数组

log_queries_not_using_index = true,
slow_query_log = true,
long_query_time = 2 sec,
max_connections = 303,
innodb_buffer_pool_size = {DBInstanceClassMemory*3/4}
昨天我的CPU利用率超过95%,我的网站因此崩溃。交通量没有大幅度增加

此外,我将数据转储到本地系统上,并测试了一个计数查询。虽然它在RDS上运行大约需要1.5秒,但在我的本地系统上运行只需要大约400毫秒。我的本地系统(4GB RAM,Intel core 2 duo 2.8GHz)上的配置为:

那么,是什么原因导致了RDS和我的本地系统之间CPU利用率的峰值以及性能时间的差异呢


谢谢,

根据表的大小-RDS实例使用EBS存储数据-如果您正在进行表扫描,那么它必须从EBS获取数据,而不是从本地缓存的内存键中获取数据,然后进行扫描。因此,您可能会看到CPU所在的RDS实例与SAN中的EBS数据之间的网络延迟增加。当您在本地计算机上执行相同的查询时,唯一的延迟是磁头寻道时间

然后是CPU时间之间的差异——根据亚马逊对EC2单元的定义,m1.medium的CPU时间(因此扫描结果的机会)比Core2Duo少

HTH-一般来说,我会尽量避免在查询中进行计数,因为这是一个非常低效的查询(正如您所看到的),当数据库处于实时变化的负载水平下时,它可能并且将继续导致令人讨厌的不期望的结果

R

max_connections = 100,
slow_query_log = true,
long_query_time = 2 sec,
innodb_buffer_pool_size = 72351744