我正在尝试提高数据库的性能,简化设置如下:
修改
插入速度非常快,因为PostgreSQL只是按接收顺序写入行。但是,当尝试获取具有给定设备的连续时间戳的许多数据时,查询不是那么快。我理解的方式是,由于数据的收集方式,表的每个页面上的给定设备永远不会超过一行。因此,如果我想获得具有给定设备的连续时间戳的10k数据,PostgreSQL必须从磁盘获取10k页。此外,由于此操作可以在任何1k设备上完成,因此这些页面不会保存在RAM中。
我试图CLUSTER表,它确实解决了性能问题,但这个操作非常长(约1天)并且它锁定整个表,所以我放弃了这个解决方案。
我已经阅读了有关分区的内容,但如果我需要在每次连接新设备时添加新表,那么这将意味着大量的脚本,而且在我看来有点容易出错。
我相信这个设置不是特别原创,所以我可以使用一些建议吗?
感谢阅读, 纪尧姆
答案 0 :(得分:0)
我猜测你的索引的选择性也很低,因为你首先将device_id索引(只有1000个不同),而不是时间戳。
取决于您对提取的数据执行的操作,但可能解决方案可能是对操作进行批处理,例如在预定时间内获取数据并一次处理所有1000个设备的数据。