Postgresql针对分散数据的性能提示

时间:2016-03-03 16:32:36

标签: performance postgresql

我正在尝试提高数据库的性能,简化设置如下:

修改

  • 一个包含3行(id_device,timestamp,data)的表,其中包含复合btree索引(id_device,timestamp)
  • 每分钟发送数据的1k设备

插入速度非常快,因为PostgreSQL只是按接收顺序写入行。但是,当尝试获取具有给定设备的连续时间戳的许多数据时,查询不是那么快。我理解的方式是,由于数据的收集方式,表的每个页面上的给定设备永远不会超过一行。因此,如果我想获得具有给定设备的连续时间戳的10k数据,PostgreSQL必须从磁盘获取10k页。此外,由于此操作可以在任何1k设备上完成,因此这些页面不会保存在RAM中。

我试图CLUSTER表,它确实解决了性能问题,但这个操作非常长(约1天)并且它锁定整个表,所以我放弃了这个解决方案。

我已经阅读了有关分区的内容,但如果我需要在每次连接新设备时添加新表,那么这将意味着大量的脚本,而且在我看来有点容易出错。

我相信这个设置不是特别原创,所以我可以使用一些建议吗?

感谢阅读, 纪尧姆

1 个答案:

答案 0 :(得分:0)

我猜测你的索引的选择性也很低,因为你首先将device_id索引(只有1000个不同),而不是时间戳。

取决于您对提取的数据执行的操作,但可能解决方案可能是对操作进行批处理,例如在预定时间内获取数据并一次处理所有1000个设备的数据。