本文介紹時序儲存查詢加速功能的全域緩衝與並發計算原理,以及各項配置參數的含義。
原理介紹
全域緩衝與並發計算原理說明如下所示:
全域緩衝
Prometheus Query計算引擎預設不對執行結果進行緩衝,每次查詢都需重新計算所有資料,在資料量大、時間範圍長時效能較差。全域緩衝功能支援複用上一次相同查詢(PromQL語句和step參數值一致)的部分查詢結果,並對未命中緩衝的時間區間單獨執行新的查詢。
開啟全域緩衝後,會將每次查詢區間的start和end參數對齊到step參數的整數倍,極大提升快取命中機率,從而提升查詢執行效率。相應query執行完成後,也會同時更新對應的緩衝結果。
為減少資料完整性的影響,如果查詢不完整將不會儲存到緩衝結果中;同時超過目前時間區間的查詢結果也不會更新到緩衝中。
並發計算
Prometheus標準的Query預設僅在一台機器上進行單協程計算,在時間軸多、查詢時間段長、計算邏輯複雜等情境下速度較慢。Log Service對Prometheus引擎進行了改造,支援Prometheus Query的分布式並發執行。並發計算提供按時間片和按時間軸兩種切分模式,並將一個PromQL Query調度到多台機器執行,效能相比單機執行可提升2~10倍。
按時間片切分
以下面Query為例,將每2h切分成一個query,即能夠啟動6個任務並發執行計算,最後將結果進行合并。
query: sum(metric) interval: 12h step: 2m按時間軸切分
如果一個Metric的時間軸有50萬條,如果設定切分大小為10,即分成10個任務並發執行計算。每個任務負責5萬條左右的時間軸資料,各任務執行完成後會對結果進行合并。
您無需關心PromQL是否適合執行並發計算,Log Service時序計算引擎會自行判斷並將適合并發計算的PromQL查詢調度到多個節點執行計算。
並發計算更適用於查詢範圍長或者Metric時間軸較多的計算情境,而資料量較小的查詢請求則可能會受到分布式調度的影響而獲得負收益。在明確使用情境的情況下,推薦採用Http FormValue形式針對特定查詢情境配置並行計算的相關參數項。
在彙總計算的情境中,Aggregation without()的用法在並發計算中的效能提升較小,例如,agg without() metric{}。此Query等同於對所有Label資訊做by操作,該類計算對結果集中sample數量的影響較小,即仍有大量的中間結果需進行匯總彙總,因此對效能的提升較小,甚至在海量時間軸的情境中可能導致負最佳化。同理,如果對多個Label做by運算也同樣可能出現上述情況。
配置說明
查詢加速支援以下參數配置項,支援MetricsConfig與Http FormValue兩種方式進行參數配置。
參數類別 | 參數項 | 說明 | MetricsConfig | FormValue | 說明 |
parallel_config 並發計算配置項 | enable | 是否開啟並發計算,預設關閉。 | 支援 | 支援 | 並發計算會將Query拆分成多個小Query並調度到多個子計算節點執行,最後在主計算節點上匯聚結果。 |
mode | 並發選擇模式,說明如下:
| 支援 | 不支援 | 並發計算的配置有兩種模式,推薦按照下方截圖中的參數來添加靜態配置。 | |
timePieceInterval | 按照時間區間進行分區的時間段單元,單位秒。支援的範圍為[3600, 86400*30],預設21600(6小時)。 | 支援 | 支援 | 按照時間區間進行分區的最小分區單元,單位:秒。在控制台中,需按小時粒度輸入。 | |
timePieceCount | 按照時間區間進行分區的分區數,支援1-16,預設8。 | 支援 | 支援 | 按照時間區間進行分區的最大分區數。 | |
totalParallelCount | 全域並發數,支援2-64,預設8。 | 支援 | 支援 | 全域並發數。支援按照時間軸進行分區,該參數表示總的分區數。例如,當前Metric的時間軸有500萬條,設定總並發數為10,即每個並發處理50萬條時間軸的資料。 | |
parallelCountPerHost | 單機並發數,支援1-8,預設2。 | 支援 | 支援 | 單機並發數。支援按照時間軸進行分區,所有分區會被調度到不同的機器節點上執行,此參數用於控制單台機器上被分配到的分區數。 | |
query_cache_config 全域緩衝配置項 | enable | 是否開啟全域緩衝,預設關閉。 | 支援 | 支援 | 開啟後能夠複用之前相同Query的部分結果。 |
通過MetricsConfig配置查詢加速
MetricsConfig是Log Service為每個時序庫提供的獨立的參數配置項,支援Log Service控制台與SDK兩種配置方式。在新增或更新MetricsConfig後,需等待3分鐘生效。
通過SLS控制台設定時序庫的加速配置
在MetricStore屬性頁面,完成如下操作。如何進入MetricStore屬性頁面,請參見修改MetricStore配置。
其中,並發計算支援兩種配置模式。
自動模式:Log Service後端會根據相同Query近幾次執行時拉取的資料量大小來估算當次的並發度大。
靜態配置:您自訂配置並發度大小,如有配置需求建議諮詢Log Service的技術支援人員。

通過SDK設定時序庫的MetricsConfig
Log ServiceJava SDK中提供了修改MetricsConfig的介面,支援通過JSON形式配置MetricsConfig的各項具體參數,如下面的樣本。
{
"parallel_config": {
"enable": true,
"mode": "static",
"parallel_count_per_host": 2,
"time_piece_count": 8,
"time_piece_interval": 21600,
"total_parallel_count": 8
},
"query_cache_config": {
"enable": true
}
}下表給出了查詢加速配置中的各個參數配置項與MetricsConfig JSON欄位、FormValue中Key欄位的映射關係。
參數類別 | 參數項 | MetricsConfig json欄位 | Form Value | |
parallel_config | enable | enable | x-sls-parallel-enable | |
mode | mode | 無 | ||
timePieceInterval | time_piece_interval | x-sls-parallel-time-piece-interval | ||
timePieceCount | time_piece_count | x-sls-parallel-time-piece-count | ||
totalParallelCount | total_parallel_count | x-sls-parallel-count | ||
parallelCountPerHost | parallel_count_per_host | x-sls-parallel-count-per-host | ||
query_cache_config | enable | enable | x-sls-global-cache-enable | |
通過Http FormValue配置查詢加速
除MetricsConfig方式外,也支援在HTTP請求中加入參數值,此種配置方式僅對當次請求有效。時序庫指標查詢的API介面詳情,請參見時序指標查詢API。
此處提供全域緩衝和並發計算兩個情境的配置樣本。
全域緩衝
通過FormValue的形式新增了x-sls-global-cache-enable=true參數以開啟全域緩衝。
https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range?query=sum(up)&start=1690876800&end=1690877800&step=10&x-sls-global-cache-enable=true並行計算
新增x-sls-parallel-enable=true&x-sls-parallel-count=16參數,表示當次請求啟用並發計算且並發度大小為16。
https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range?query=sum(up)&start=1690876800&end=1690877800&step=10&x-sls-parallel-enable=true&x-sls-parallel-count=16