如何使用自适应分块

时间:2018-11-01 13:48:04

标签: timescaledb

我尝试将自适应分块与timescaleDb 1.0.0一起使用。但这不能按预期工作。

  1. 我正在使用chunk_target_size => 'estimate'创建一个超表。
  2. 当我检查chunk_target_size时,它约为1.2亿美元-似乎很合理
  3. 现在,我启动一个测试程序,该程序将循环5k次,并在每个事务中插入1k行(因此总共只有500万行)
    • 然后我检查块大小时,我看到〜3.5k的块只有152kB(第一个是88B)!

我想念什么?

SQL语句

1-创建超级表

SELECT create_hypertable('mytable', 'time', chunk_target_size => 'estimate';

2-检查chunk_target_size

select table_name, chunk_target_size from _timescaledb_catalog.hypertable;

3-检查数据块大小

SELECT distinct total_size FROM chunk_relation_size_pretty('mytable');

其他信息

固定的块大小

当我将chunk_target_size设置为100MB时,chunk_target_size将约为1.04亿。但是插入数据后的最大值chunk_relation_size也只有152kB

chunk_time_interval

当我设置chunk_time_interval而不是chunk_target_size时,我会得到更大的chunk_relation_sizes。

更新(2.11.2018)

我使用PGTune来改进数据库配置。 shared_buffers只有128MB-现在是1280MB。
通过此更改,chunk_target_size已增加到约12亿,但生成的块仍然仅为152kB。

2 个答案:

答案 0 :(得分:0)

为了给您一个更准确的答案,我将不得不看更多(也许尝试使用Slack以获得更多同步帮助?)。

我会检查您是否在更新共享内存设置后重新制作了超表。估算值仍将基于您以前的内存设置,直到您再次运行它。目前尚不清楚是否在更改共享内存后重新制作了超表。

答案 1 :(得分:0)

这是闲暇频道的名言:

  

要进入自适应分块,需要达到两个块“填充”阈值。一个阈值与大小(字节数)相关,另一个与间隔长度相关。这些阈值可防止作用于“未满”的块。因此,如果您插入稀疏数据以使块不超过两个阈值,则自适应块化将不会更改任何间隔。

看来,我的用例无法使用估算功能。
另外请注意,adaptive chunking功能仍处于测试阶段

更新04.2019

adaptive chunking功能现已弃用(在1.2版中)