全部產品
Search
文件中心

ApsaraDB RDS:緩衝淘汰

更新時間:Jun 19, 2024

為了降低長串連的記憶體佔用,確保資料庫不會因為過多的長串連而導致記憶體不足,RDS PostgreSQL支援進程級的緩衝淘汰功能,使用LRU(Least Recently Used)的策略釋放不常使用的緩衝,從而降低串連的記憶體使用量量,提升執行個體的穩定性。

前提條件

RDS PostgreSQL 11及以上版本均支援此功能,如提示不支援,請升級核心小版本,具體操作請參見升級核心小版本

背景資訊

PostgreSQL中,後端進程每訪問到一個表,會將該表的元資訊緩衝到本地,並且這些緩衝不會被主動釋放,以減少後續對磁碟的訪問。這導致長串連可能會積累大量的緩衝,並導致記憶體溢出(OOM)。因此,為了提高RDS PostgreSQL的穩定性,需要引入緩衝淘汰機制,及時釋放不常用的緩衝。

應用情境

具有大量長串連的SAAS情境

影響

本文中涉及修改的參數均不涉及重啟執行個體。

注意事項

為了確保RDS PostgreSQL執行個體的正常運行,一些特殊的緩衝資訊無法淘汰,因此,在極端情況下,無法保證您設定的緩衝上限被完全滿足。

操作步驟

RDS PostgreSQL的串連緩衝主要可分為 relcache(用於緩衝使用者表的元資訊),syscache(用於緩衝系統資料表的元組)和 plancache(用於緩衝使用者定義的執行計畫)。RDS PostgreSQL當前支援通過參數設定,調整relcachesyscache保留緩衝的數量,plancache不支援限制。

說明

如果期望監控每個進程的緩衝使用量,還需要使用CREATE EXTENSION rdsutils安裝依賴外掛程式,同時通過參數設定功能修改參數rds_enable_cache_monitor取值為on

  • 參數rds_enable_cache_monitor設定為on時,資料庫效能會有下降,每條SQL會額外耗時2毫秒左右。

  • 參數rds_enable_cache_monitor只能通過控制台修改,更多資訊,請參見設定執行個體參數

修改當前串連

-- 當前串連開啟 relcache 的淘汰功能,最多緩衝 1000 個使用者表
SET rds_relcache_max_cached_relations = 1000;
-- 關閉當前串連 relcache 的淘汰功能
SET rds_relcache_max_cached_relations = -1;


-- 當前串連開啟 syscache 的淘汰功能,最多緩衝 10000 系統資料表的元組
set rds_syscache_max_cached_tuples = 10000;
-- 關閉當前串連 syscache 的淘汰功能
set rds_syscache_max_cached_tuples = -1;

設定所有串連

前往控制台設定參數rds_relcache_max_cached_relationsrds_syscache_max_cached_tuples。更多資訊,請參見設定執行個體參數

相關參數解釋

參數名

參數說明

取值建議

rds_enable_cache_monitor

是否監控每個進程的緩衝使用量。

取值範圍:

  • on:監控

  • off(預設值):不監控

根據實際需要進行設定。

rds_relcache_max_cached_relations

單個串連緩衝使用者表數量的上限。

取值範圍:[-1, INT_MAX]

預設值:-1,表示關閉該功能。

  • 該參數合適的取值與使用者業務關係密切。業務涉及到的表數量越多,該值應該越大。

  • 如果使用了分區表或timescaledb等外掛程式,則建議設定為-1關閉該功能,或者將該參數設定為較大的值。

  • 如果該值設定過小,會導致資料庫效能下降,推薦該值不低於 1000。

rds_syscache_max_cached_tuples

單個串連緩衝系統資料表元組數量的上限。

取值範圍:[-1, INT_MAX]

預設值:-1,表示關閉該功能。

  • 該參數合適的取值與使用者業務關係密切。表的數量,欄位越多,該值應該越大。

  • 如果使用了分區表或timescaledb等外掛程式,則建議設定為-1關閉該功能,或者將該參數設定為較大的值。

  • 如果該值設定過小,會導致資料庫效能下降,推薦該值不低於 5000。