我正在编写一个工作,通过一些MySQL表,根据一些critera选择一些行,从中提取电子邮件地址并向每个发送电子邮件。
过滤过程会查看一个表(让我们称之为storage
),这个表非常大(转换为~6gb),看起来像这样:
Columns:
id varchar(64) PK
path varchar(64) PK
game varchar(64)
guid varchar(64)
value varchar(512)
timestamp timestamp
有两个指数:(id, path)
(如上所见的PK)和guid
。
作业首先从一个表中检索一长串guid,然后批量处理它们并在storage
表上执行这样的连续查询:
SELECT guid, timestamp FROM storage
WHERE game = 'somegame'
AND path = 'path' AND value = 'value' AND timestamp >= '2015-04-22 00:00:00.0' AND timestamp <= '2015-04-29T14:53:07+02:00'
AND guid IN ( ... )
IN
子句包含guid列表。
我需要检索时间戳才能进一步过滤。
当针对我的本地MySQL 运行时,一切都按预期工作,查询大约需要180毫秒,批量为1000个guid。
在Amazon RDS上运行相同的数据库时,查询会很快开始,但在某些时候,他们会突然开始大约30秒,然后继续这样做,直到作业结束。
我已经尝试了很多东西来解决这个问题,但无法弄清楚原因。一些说明:
sql.DB
对象。此外,我准备了上述声明一次并重复使用它。 我不知道为什么会这样。任何建议,将不胜感激。
答案 0 :(得分:0)
所以,经过大量的实验,我找到了解决方案。
我在所涉及的RDS实例上使用磁存储,这可以保证大约100 IOPS。这限制了我们查询数据的速度。
我使用2000 Provisioned IOPS进行了测试,工作一直很快。