全部產品
Search
文件中心

AnalyticDB:6.0版Query Cache

更新時間:Mar 06, 2025

AnalyticDB PostgreSQL版V6.3.7.0版本引入了Query Cache特性,該特性可以緩衝查詢結果,對於重複的查詢可以非常迅速地返回查詢結果,因此對於讀多寫少,尤其是重複查詢多的情境,可以有效提升資料庫的查詢效能。

注意事項

AnalyticDB PostgreSQL版核心小版本需要為V6.3.7.0及以上版本。查詢和升級核心小版本,請參見查看核心小版本版本升級

目前AnalyticDB PostgreSQL版在使用Query Cache功能時存在以下限制:

  • 交易隔離等級必須為讀已提交(READ-COMMITTED)才支援Query Cache。

  • GUC參數rds_uppercase_colnamegp_select_invisible必須設定為off才支援Query Cache。

  • 查詢中涉及的表必須都開啟Query Cache,才能查詢快取的資料。

  • libpq前端協議版本小於3.0不支援Query Cache。

  • 如果事務塊內的查詢之前有過修改操作,查詢結果無法儲存在Query Cache中。

  • 暫存資料表、視圖、物化視圖、系統資料表、Unlogged Table、外表、Volatile/Immutable Function不支援Query Cache。

  • 直接存取分區子表時不支援Query Cache。

  • 開啟多Master特性時,所有查詢都不支援Query Cache。

  • 結果集大小超過7.5 KB不支援Query Cache。

  • 單個查詢涉及的表超過32張不支援Query Cache。

  • 拓展查詢(Extend Query)中使用了遊標(Cursor)時不支援Query Cache。

全域開啟Query Cache

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

重要

全域開啟Query Cache需要重啟執行個體後才會生效,建議您在業務低穀期執行重啟操作。

會話層級開啟或關閉Query Cache

您可以使用rds_session_use_query_cache參數在會話層級開啟或關閉Query Cache功能。

會話層級開啟Query Cache功能:

SET rds_session_use_query_cache = on;

會話層級關閉Query Cache功能:

SET rds_session_use_query_cache = off;

表級開啟或關閉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操作時,Query Cache中表的緩衝結果會失效,以免查詢到到期的結果。但是由於AnalyticDB PostgreSQL版使用了MVCC機制,而Query Cache只會儲存最新的查詢結果,導致某些情況(例如讀寫事務並發情境)會返回一個到期的結果。

Query Cache的緩衝結果有效生命週期預設為10分鐘。如果緩衝結果的時間長度超過了有效生命週期,那麼執行相同的查詢時,系統會重新執行該查詢而不是返回緩衝結果。

為了避免返回到期結果,您可以提交工單聯絡支援人員修改Query Cache有效生命週期。

效能評估

以下內容將針對OLTP和OLAP兩種負載情境對Query Cache的效果進行評估。

說明

本文的TPC-H和TPC-DS的實現基於TPC-H和TPC-DS的基準測試,並不能與發行的TPC-H和TPC-DS基準測試結果相比較,本文中的測試並不符合TPC-H和TPC-DS基準測試的所有要求。

OLTP

以下內容將使用帶索引的點查進行評估,測試結果如下:

情境

不使用Query Cache

使用Query Cache

0%快取命中率

包含1條點查句

1718 TPS

  • 測試過程中無Cache替換:1399 TPS

  • 測試過程中有Cache替換:915 TPS

50%快取命中率

包含2條點查句

807 TPS

  • 測試過程中無Cache替換:1367 TPS

  • 測試過程中有Cache替換:877 TPS

100%快取命中率

包含1條點查句

1718 TPS

11219 TPS

在OLTP負載情境,一條正常的查詢時延在10ms左右。在查詢100%快取命中的情況下,效能約有6.5倍提升。即使Query Cache無任何快取命中,相比較不使用Query Cache效能差距也較小。而且Query Cache引入的開銷絕對時間相對固定,在產生Cache替換時,大部分情況下開銷不超過20ms。

OLAP

以下內容將分別使用10 GB資料量的TPC-H和TPC-DS進行評估,測試結果如下:

情境

不使用Query Cache

使用Query Cache

10 GB TPC-H

1255秒

522秒

10 GB TPC-DS

2813秒

1956秒

在OLAP負載情境,TPC-H和TPC-DS查詢效能均有較為明顯的提升,其中TPC-H查詢命中緩衝時,Q1查詢約有1000多倍的提升。由於TPC-H和TPC-DS部分查詢結果過大,超過緩衝查詢的最大值(7.5 KB),導致這部分查詢結果沒有被緩衝,因此以上測試結果整體效能提升不高。