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_colname和gp_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 |
|
50%快取命中率 包含2條點查句 | 807 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),導致這部分查詢結果沒有被緩衝,因此以上測試結果整體效能提升不高。