查询的冷运行时间

问题描述 投票:0回答:1

我有一个每天运行几次的查询。它会检查历史数据并提升大量每小时分区。该查询在冷运行时需要近 30 秒的时间来执行,然后一旦数据被读取并且已经进入内存,它就会在不到一秒的时间内执行。

SELECT 
    timestamp, symbol,
    first(price) AS open,
    last(price) AS close,
    min(price),
    max(price),
    sum(amount) AS volume
FROM trades
SAMPLE BY 15m;

我希望避免每天第一次执行查询时等待 30 秒的用户体验(或者如果在下午晚些时候执行并且数据已从内存中逐出)。我正在考虑使用 cronjob 早上第一件事使用 API 来运行我的查询,所以下次它将是一个热执行,但也许这有点矫枉过正了。还有其他解决方案或任何我可以微调的参数吗?

database time-series questdb
1个回答
0
投票

使用 API 运行 cronjob 来执行查询并预热内存的想法是一个很好的想法。有一个稍微好一点的解决方案,就是使用

TOUCH
语句运行。

TOUCH
将获取我们想要读取的相同列,并且将像我们一样读取所有数据,但它比
SELECT
更早完成,因为它不需要返回结果,所以它更轻对于服务器来说,同时仍然在内存中预加载我们需要的所有数据。

请考虑到,当我们执行

TOUCH
时,我们不包含任何聚合或采样,仅包含我们需要预取的列列表。

我们将像这样使用它来执行上面的查询:

SELECT touch(SELECT   timestamp, symbol, price, amount   FROM trades );
© www.soinside.com 2019 - 2024. All rights reserved.