全部產品
Search
文件中心

AnalyticDB:7.0版Query Cache

更新時間:Dec 17, 2025

AnalyticDB PostgreSQL 7.0版支援Query Cache(查詢快取)。該版本的Query Cache在AnalyticDB PostgreSQL 6.0版的基礎上進行了部分重構,能夠支援更大規模的單次查詢的緩衝和整個執行個體的緩衝集大小。

類似於AnalyticDB PostgreSQL 6.0版中的查詢快取,該特性可以緩衝查詢結果,且在出現重複查詢時可以迅速地返回查詢結果。因此該特性適用於讀多寫少的情境,特別是重複查詢較多的情境。在此類情境中使用該特性可以有效地提升查詢效能。

版本限制

核心版本為v7.0.6.9及以上的AnalyticDB PostgreSQL 7.0版執行個體。

說明

如何查看核心版本,請參見查看核心小版本。如您的執行個體不滿足上述版本要求,建議您升級核心小版本

使用限制

以下情境不支援Query Cache。

  • 直接存取分區子表。

  • libpq前端協議版本小於3.0。

  • 單次查詢中涉及的表超過128張。

  • Extended Query中使用了遊標。

  • 交易隔離等級設定為READ-UNCOMMITTED或SERIALIZABLE。

  • 未指定表參數querycache_enabled=on

  • GUC參數gp_select_invisible參數值設定為on

  • 如果在事務塊內執行查詢之前有過修改操作,查詢結果無法緩衝在Query Cache中。

  • 暫存資料表、視圖、物化視圖、系統資料表、非日誌表、外表、volatile/immutable函數不支援Query Cache。

  • 結果集過大時不支援使用Query Cache。查詢能被緩衝的最大結果集大小預設為1 MB如需修改此約束,請聯絡支援人員處理(調整後需要重啟執行個體)。

當以上情況均未出現時,AnalyticDB PostgreSQL 7.0版將自動緩衝查詢結果。若未來出現同樣的查詢時,則直接使用本次緩衝結果。

開啟Query Cache功能

由於Query Cache只有在查詢時間局部性比較高的情況下才能發揮作用,因此Query Cache功能預設關閉。如需開啟Query Cache功能,請聯絡支援人員處理。

表級開啟或關閉Query Cache

實際業務情境中,部分表可能查詢頻率較低、資料修改頻率高,此類情境不適合使用Query Cache。因此,AnalyticDB PostgreSQL 7.0版提供表級配置項querycache_enabled,支援在建表時顯式控制是否啟用該表的Query Cache功能。

重要

只有開啟Query Cache功能,並且查詢涉及的所有表都開啟了querycache_enabled時,查詢才有可能使用Query Cache。

  • 建立表,可以使用如下語句開啟Query Cache。

    CREATE TABLE table_name (c1 int, c2 int) WITH (querycache_enabled=on);
  • 建表時未開啟Query Cache,可以使用如下語句開啟Query Cache。

    ALTER TABLE table_name SET (querycache_enabled=on);
  • 不再需要使用Query Cache的表,可以使用如下語句關閉Query Cache。

    ALTER TABLE table_name SET (querycache_enabled=off);

Query Cache失效

為了保證Query Cache查詢結果的正確性,當執行個體中的表涉及DDL或DML修改操作時,對應的表的查詢結果緩衝將失效。

由於AnalyticDB for PostgreSQL使用MVCC機制,而Query Cache只緩衝最新的查詢結果,因此可能會出現緩衝未及時更新,從而導致查詢結果到期的情況。典型的情境是同一張表讀寫事務並發。

CREATE TABLE test1 (c1 int, c2 int) WITH (querycache_enabled=on);
1: BEGIN;
1: SELECT * FROM test1;
2: BEGIN;
2: INSERT INTO test1 values (3, 4);
2: COMMIT;
1: COMMIT;
-- 這行執行結果仍是空,而查不出(3,4), 因為引用了上次的緩衝
1: SELECT * FROM test1;

針對此情況,Query Cache提供了參數adbpg_querycache_item_valid_duration。該參數控制查詢結果緩衝的有效生命週期(預設值為10分鐘)。如果某查詢結果緩衝時間超過了該生命週期,當同樣查詢進來時,不再引用該查詢結果,而是重新執行該查詢。您可以根據實際情況,關閉該表的Query Cache(querycache_enabled=off),或是設定adbpg_querycache_item_valid_duration值。

說明

通常情況下,adbpg_querycache_item_valid_duration參數使用預設值即可。如需修改,請聯絡支援人員處理。

效能評估

AnalyticDB PostgreSQL 7.0版中的Query Cache在TP負載效能方面未表現出顯著提升,也不會對效能造成負面影響。AP負載方面,分別使用10 GB的TPC-H和TPC-DS負載進行了評估,其結果如下。

情境

關閉Query Cache

開啟Query Cache

10 GB TPC-H

360.35s

13.42s

10 GB TPC-DS

1176.63s

6.71s

從結果來看,無論TPC-H還是TPC-DS,查詢效能都有顯著提升。對於TPC-H,查詢命中緩衝時,Q1(耗時10毫秒)有超過1000倍的效能提升。理論上,如果查詢命中Query Cache,執行時間基本在1秒之內。而實際在使用Query Cache時, TPC-H和TPC-DS總耗時在10秒左右,是因為部分查詢結果超過了單次查詢能夠緩衝在Query Cache中的最大值1 MB因此這些查詢的查詢結果沒有被緩衝。