【发布时间】:2019-04-04 10:05:19
【问题描述】:
我有一个 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 内存。
- 块间隔设置为 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 天查询时,ram 使用量也不会增加。
我想了解这是预期行为还是设置有问题。
我尝试为 docker 容器设置内存预留和内存限制,但没有效果。
【问题讨论】:
-
有一个timescaledb slack channel,您可能可以在其中询问开发人员。
标签: postgresql docker postgresql-11 timescaledb