本文介紹了PolarDB PostgreSQL版的全域執行計畫緩衝(Global Plan Cache)功能。
背景資訊
在之前的PolarDB中,執行計畫緩衝(Plan Cache)是和Prepared Statement進行綁定的,這種做法存在以下兩個問題:
每個串連的Plan Cache是獨立的,無法共用。
每個串連都會緩衝一份Plan Cache,導致記憶體佔用較多。
PolarDB PostgreSQL版引入了全域執行計畫緩衝(簡稱GPC)功能,通過讓不同的串連共用同一份Plan Cache來解決以上兩個問題。
Plan可以在不同的Prepared Statement、串連之間共用。對於有大量不同SQL的應用程式,GPC可以大大降低記憶體的使用量,減少OOM(Out of Memory)的風險。 此外更高效的Plan Cache機制減少了產生執行計畫的代價,因此效能也有所提升。
Plan共用的前提是它們的Query Key是一致的,Query Key組成包括以下幾部分:
查詢文本。
資料庫標識號。
對象搜尋路徑。
使用者ID。
前提條件
PolarDB PostgreSQL版叢集預設開啟GPC功能。
支援的PolarDB PostgreSQL版的版本如下:
PostgreSQL 16(核心小版本2.0.16.3.1.1及以上)
PostgreSQL 15(核心小版本2.0.15.7.1.1及以上)
PostgreSQL 14(核心小版本2.0.14.9.15.0及以上)
PostgreSQL 11(核心小版本2.0.11.9.28.0及以上)
使用限制
僅支援Prepared Statement形式的查詢,即不支援PL/SQL情境下的Plan Cache。
僅支援
SELECT、INSERT、UPDATE、DELETE語句。不支援暫存資料表。
參數說明
參數 | 說明 |
polar_gpc_mem | 用於設定存放GPC的記憶體大小。單位:MB。預設值為30 MB,取值不超過 說明
|
polar_enable_gpc_level | GPC功能的開啟層級,允許動態修改。取值如下:
說明
|
polar_gpc_clean_timeout | 清理不經常用GPC的時間間隔,可以動態修改,單位:秒。預設值為1800秒,取值範圍為0~24小時之間的數值。 |
polar_worker.gpc_clear_interval | 清理失效GPC的時間間隔,可以動態修改,單位:秒。預設值為60秒,最大允許設定為 (2^32 - 1)/1000。 |
polar_gpc_clean_max | 一次清理的GPC數量,可以動態修改。預設值為100,取值範圍為10~10000之間的數值。 |
polar_gpc_partitions | 用於儲存GPC的雜湊表數量。預設值為32,取值範圍為1~1024之間的數值。 說明 參數修改後需要重啟才會生效。 |
polar_gpc_entries | 每個雜湊表中的最大條目數量。預設值為1024,取值範圍為1~10000之間的數值。 說明 參數修改後需要重啟才會生效。 |
使用指南
全域執行計畫緩衝(Global Plan Cache)功能的所有監控介面都在polar_gpc外掛程式中,執行以下命令,建立外掛程式。
CREATE EXTENSION IF NOT EXISTS polar_gpc;