如何使用自适应分块

How to use adaptive chunking

我尝试将自适应分块与 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。

我必须查看更多信息才能为您提供更准确的答案(也许试试我们的 Slack 以获得更多同步帮助?)。

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

引用自 Slack 频道:

There are two chunk "fill" thresholds that need to be reached for adaptive chunking to kick in. One is associated with the size (number of bytes) and the other with the interval length. These thresholds protect against acting on chunks that are "underfilled". So, if you insert sparse data so that chunks do not exceed both thresholds, adaptive chunking will not change any intervals.

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

更新 04.2019

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