gpt4 book ai didi

postgresql - TimescaleDB:具有追加与中点插入和索引的超表的性能

转载 作者:行者123 更新时间:2023-12-04 07:30:13 47 4
gpt4 key购买 nike

我有一些时间序列数据要导入到 TimescaleDB 中,作为超表中的 (time, item_id, value) 元组。

我已经创建了一个索引:

CREATE INDEX ON time_series (item_id, timestamp DESC);

TimescaleDB 在时间序列中间插入行与在time 末尾追加行时是否具有不同的性能特征?我知道这是一些 native PostgreSQL 数据结构(如 BRIN 索引)的问题。

我问是因为对于某些 item_id,我可能有不完整的数据,我需要在其他 item_id 填满时间序列的尖端后插入这些值。基本上,某些项目可能是严重落后于其他项目的旧数据。

最佳答案

我不认为它有不同的 react ,

在您的情况下,插入性能将取决于

  • 你在那个表上有多少个索引?它们真的都需要吗?
  • 这些索引是否有最低要求的列数?
  • 使用并行插入/复制。见here了解更多信息。
  • 批量插入行
  • 正确配置您的 shared_buffers(文档推荐的可用 RAM 的 25%)

但是这个技巧会帮助你最好

  • 以松散的时间顺序写入数据当 block 的大小合适时,最新的 block 及其关联的索引自然会保留在内存中。使用最近的时间戳插入的新行将写入内存中已有的这些 block 和索引。

如果插入了具有足够旧时间戳的行——即,它是乱序或回填写入——则需要从磁盘读入与较旧 block (及其索引)对应的磁盘页面。这将显着增加写入延迟并降低插入吞吐量。

特别是,当您第一次加载数据时,请尝试按排序的时间戳递增顺序加载数据。

如果要批量加载有关许多不同服务器、设备等的数据,请小心:

不要按服务器顺序批量插入数据(即服务器 A 的所有数据,然后是服务器 B,然后是 C,等等)。这将导致磁盘抖动,因为加载每个服务器将在重新开始之前遍历所有 block 。

相反,安排批量加载,以便所有服务器的数据以松散的时间戳顺序插入(例如,所有服务器并行插入第 1 天,然后所有服务器并行插入第 2 天,等等)

来源:TimeScale blog

关于postgresql - TimescaleDB:具有追加与中点插入和索引的超表的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67982611/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com