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
您可以使用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的效果進行評估。
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),導致這部分查詢結果沒有被緩存,因此以上測試結果整體性能提升不高。