Timescale Compressed table 用于简单查询
Timescale Compressed table taking forever for simple queries
我有一个包含大约 4000 万行的超表。希望压缩它以减少我们的一些存储成本。在压缩之前,以下查询运行速度超快。
select * from trades where pair = 'xxxxxxxxx';
压缩后,此查询挂起很长时间(30-40+s)
查看查询计划,它似乎在解压缩每个单独的块,然后检查是否存在该对,如果不存在则移动到下一个块。虽然它应该检查该对是否存在,并且只有在存在时才解压缩块。
我已经 segementby
设置为配对,所以我不完全确定我缺少什么。
CREATE TABLE trades (
"timestamp" timestamptz NOT NULL,
tx varchar(255) NOT NULL,
pair varchar(255) NOT NULL,
price float8 NOT NULL,
amount float8 NOT NULL
);
CREATE INDEX trades_pair_timestamp_idx ON public.trades USING btree (pair, "timestamp" DESC);
SELECT create_hypertable('trades', 'timestamp');
alter table trades set (
timescaledb.compress,
timescaledb.compress_segmentby = 'pair',
timescaledb.compress_orderby = 'timestamp');
SELECT add_compression_policy('trades', INTERVAL '1 week');
您使用的是哪个版本的 Timescaledb 运行? There was a bug related to varchar fields not being filtered prior to decompression, which has been fixed in 2.3.1
我有一个包含大约 4000 万行的超表。希望压缩它以减少我们的一些存储成本。在压缩之前,以下查询运行速度超快。
select * from trades where pair = 'xxxxxxxxx';
压缩后,此查询挂起很长时间(30-40+s)
查看查询计划,它似乎在解压缩每个单独的块,然后检查是否存在该对,如果不存在则移动到下一个块。虽然它应该检查该对是否存在,并且只有在存在时才解压缩块。
我已经 segementby
设置为配对,所以我不完全确定我缺少什么。
CREATE TABLE trades (
"timestamp" timestamptz NOT NULL,
tx varchar(255) NOT NULL,
pair varchar(255) NOT NULL,
price float8 NOT NULL,
amount float8 NOT NULL
);
CREATE INDEX trades_pair_timestamp_idx ON public.trades USING btree (pair, "timestamp" DESC);
SELECT create_hypertable('trades', 'timestamp');
alter table trades set (
timescaledb.compress,
timescaledb.compress_segmentby = 'pair',
timescaledb.compress_orderby = 'timestamp');
SELECT add_compression_policy('trades', INTERVAL '1 week');
您使用的是哪个版本的 Timescaledb 运行? There was a bug related to varchar fields not being filtered prior to decompression, which has been fixed in 2.3.1