生产中的查询速度不稳定(RDS)

时间:2015-05-29 00:34:56

标签: python postgresql amazon-rds gevent

首先,服务器设置:

  • nginx前沿世界
  • gunicorn与gevent workers一起运行Flask应用程序
  • Postgres数据库,在应用程序中汇集的连接,从Amazon RDS运行,与psycopg2连接,修补以与gevent一起使用

我遇到的问题是令人费解的慢查询,有时会运行大约100毫秒(理想),但通常会达到10秒或更多。虽然time是查询中的参数,但快速和慢速查询之间的差异比结果集中的更改频繁发生。这似乎与CPU使用率,内存使用率,读/写I / O,请求频率等任何有意义的峰值无关。它似乎是任意的。

我试过了:

  • 优化查询 - 绝对有效,但它在本地运行得非常好,以及我通过psql直接在服务器上试用它。
  • 在更大/更好的RDS实例上运行 - 我目前正在使用PIOPS处理m3.medium实例并且没有接近该读取速率,所以我不会认为这是个问题。
  • 调整枪支工作人员数量 - 我认为这可能是一个问题,如果psycopg2驱动程序不得不过度切换上下文,但这没有效果。
  • 更多 - 我已经在这方面工作了不少时间,所以这些只是我尝试过的几件事。

有没有人有关于如何调试此问题的想法?

2 个答案:

答案 0 :(得分:1)

这是共享租赁带给你的,不可预测的结果。

查询运行的数据集大小是多少?虽然Craig说这听起来像是busrty checkpoint活动,但这没有意义,因为这是RDS。这听起来更像缓存掉落,例如;你的关系正在缓存中。

你说你正在运行piop但是m3.medium不是EBS优化的实例。

至少需要:

  1. 高实例级别。确保您的内存超过活动数据集。

  2. EBS优化实例,请参见此处:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html

  3. 很多记忆。

  4. PIOPS

  5. 当你拥有所有这一切时,你将意识到你将节省大量资金,将PostgreSQL(或任何数据库)推向裸机,让AWS保持擅长的状态,内存和CPU(不是IO)。 / p>

答案 1 :(得分:0)

您可以在psql中尝试此操作以获取有关查询计时的更多详细信息 EXPLAIN sql_statement 还要打开更多数据库日志记录。 mysql的查询分析速度很慢,也许PostgreSQL有一个等价的。