Hologres自V3.1版本起,支援查詢快取(Query Cache)功能。該功能支援將Query結果緩衝至記憶體,後續遇到相同或者類似Query時,系統可優先從記憶體中匹配彙總結果,避免資料讀取與計算開銷,從而提升Query查詢效能。Query Cache適用於高並發、重複查詢的情境(如壓測、BI報表等),能夠顯著最佳化查詢效率並減少資源浪費。
注意事項
僅Hologres V3.1及以上版本支援Query Cache功能。
說明若執行個體版本過低,請使用執行個體升級或加入即時數倉Hologres交流群申請升級執行個體。加入線上支援DingTalk群請參見如何擷取更多的線上支援?。
Query Cache預設關閉,使用之前請先按照下方操作開啟。
-- 開啟query cache功能,需要superuser執行,開啟後建立串連生效 ALTER DATABASE <database_name> SET hg_experimental_enable_query_cache=on;Query Cache的結果是弱一致,如果緩衝期間資料有寫入,不保證結果正確。
含RANDOM函數的Query結果不會被緩衝。
使用Query Cache
Hologres中的記憶體大致分為三個部分:Query、緩衝和Meta,其中緩衝所佔用的總記憶體約佔執行個體總記憶體的30%。以單個Worker的記憶體配置為例,單個Worker的記憶體上限為64 GB,因此緩衝分配的記憶體上限為30%,約為20 GB。Query Cache所使用的記憶體是緩衝的一部分。
query_cache_percentage設定Query Cache分配記憶體
在使用Query Cache時,必須為其分配相應的記憶體資源,否則將無法充分發揮Query Cache的功能。
單個Worker分配的記憶體 = 20 GB * query_cache_percentage * 0.01
執行個體中總的分配記憶體 = 單個Worker分配的記憶體 * Worker個數
-- 樣本分配的記憶體為20 GB*query_cache_percentage*0.01=400 MB
SELECT hg_admin_command('set_global_flag', 'query_cache_percentage=2');設定單條Cache結果最大記憶體限制
單條Cache結果最大記憶體限制預設是10 MB,可以通過如下參數修改,但是上限是20 GB。
-- 調整單條Cache結果最大記憶體限制(預設10M)
ALTER DATABASE <database_name> SET hg_experimental_query_cache_max_kb_per_item=10240;調整Query Cache到期時間
Hologres中的緩衝有淘汰策略,其中的演算法包括記憶體上限、保留時間等,詳細技術原理請參見儲存技術揭秘,可以通過如下參數修改Query Cache到期時間。
Query Cache到期時間預設為60秒。
設定到期時間的單位為秒。
-- 調整Query Cache到期時間,單位秒(預設60秒)
ALTER DATABASE <database_name> SET hg_experimental_query_cache_expire_time_sec=60;