PostgreSQL查询速度慢,问题是什么?

时间:2017-04-25 09:40:42

标签: python django performance postgresql

我试图使用Python Django将一些测量数据存储到我的postgresql数据库中。 到目前为止一切都很好,我用django制作了一个docker容器,另一个用postgresql服务器制作了一个。 但是,我的测量表中接近2M行,查询开始变慢,而我不确定原因,我没有进行非常激烈的查询。

此查询

SELECT ••• FROM "measurement" WHERE "measurement"."device_id" = 26 ORDER BY "measurement"."measure_timestamp" DESC LIMIT 20
例如,

运行需要3到5秒,具体取决于我查询的设备。

我希望这会跑得更快,因为我没有做任何花哨的事情。 测量表

id INTEGER
measure_timestamp TIMESTAMP WITH TIMEZONE
sensor_height INTEGER
device_id INTEGER

带有id和measure_timestamp的索引。 服务器看起来不太忙,即使它只有512M内存,我在查询过程中还剩下很多。

我使用shared_buffers = 256MB和work_mem = 128MB配置了postgresql服务器。 总数据库不到100MB,因此应该很容易适应。 如果我在PgAdmin中运行查询,我看到很多块I / O,所以我怀疑它必须从磁盘读取,这显然很慢。

任何人都可以在正确的方向上给我一些指示如何找到问题吗?

编辑: 在查询上添加了explain analyze的输出。我现在在device_id上​​添加了索引,这有很多帮助,但我希望查询时间更快。 https://pastebin.com/H30JSuWa

2 个答案:

答案 0 :(得分:1)

measure_timestampdevice_id上有indexes吗?如果查询始终采用该表单,您可能还需要multi-column indexes

答案 1 :(得分:1)

请查看表格的分配键。数据可能是稀疏填充的,因此会影响性能。当您拥有2M记录的数据时,选择正确的分配密钥非常重要。有关详细信息,请阅读此on why distribution key is important