我有一个 timescaledb 设置,我定期转储数据(每 10 分钟左右)。它是使用 docker-compose 部署的。
数据由 entity_id 和测量值以及其他一些内容(例如区域等)组成。
一个典型的查询是get per day minimum for last 30 days for an entity_id
。
SELECT
time_bucket_gapfill('1 day', time, date_trunc('day', now() - interval '30 days'), date_trunc('day', now())) AS one_day,
country,
type_id,
min(measurement)
FROM hypertable
WHERE
entity_id='XYZ' AND
country='US' AND
time > time_bucket('1 day', now() - interval '30 days') AND
time < time_bucket('1 day', now())
GROUP BY one_day, country, type_id
- 服务器有 8GB 的 RAM。
- 块间隔设置为 1 天。
每个块的大小约为 4.5GB
chunk_table | table_size | index_size | total_size ---------------------------------------|-------------------------|------------ _timescaledb_internal._hyper_1_1_chunk | 696 MB | 1675 MB | 2370 MB _timescaledb_internal._hyper_1_2_chunk | 1318 MB | 3223 MB | 4540 MB _timescaledb_internal._hyper_1_3_chunk | 1318 MB | 3222 MB | 4539 MB _timescaledb_internal._hyper_1_4_chunk | 1318 MB | 3223 MB | 4540 MB
数据库目前有大约 24 个块(24 天的数据)。
我一直在做一些基准测试和负载测试wrk
,发现大量查询需要几秒钟才能完成。我看到的问题是 timescaledb 的 ram 使用量保持在 50MB 左右。并在运行上述查询的负载测试期间达到约 100MB,而 CPU 使用率和磁盘 IO 显着上升。
我的期望是大约一大块(最近的)数据将在 RAM 中。即使该假设是错误的,当发出 30 天查询时,内存使用量也不会增加。
我想了解这是预期行为还是设置存在问题。
我尝试为 docker 容器设置内存预留和内存限制,但没有效果。