本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
監控 Aurora PostgreSQL 邏輯複寫的寫入快取和邏輯槽
監控邏輯複寫寫入快取並管理邏輯插槽,以提高 Aurora PostgreSQL 資料庫叢集的效能。下列是有關寫入快取和邏輯插槽的詳細資訊。
監控 Aurora PostgreSQL 邏輯複寫寫入快取
根據預設,Aurora PostgreSQL 版本 14.5、13.8、12.12 和 11.17 及更高版本會使用寫入快取來改善邏輯複寫的效能。如果沒有寫入快取,Aurora PostgreSQL 會在實作原生 PostgreSQL 邏輯複寫程序時使用 Aurora 儲存層。方法是將WAL資料寫入儲存體,然後從儲存體讀取資料以解碼資料,然後將 (複寫) 傳送到其目標 (訂閱者)。這可能會在 Aurora PostgreSQL 資料庫叢集的邏輯複寫期間產生瓶頸。
寫入快取可將對 Aurora 儲存層的依賴降至最低。Aurora PostgreSQL 使用緩衝區快取邏輯WAL串流,以便在複寫過程中使用,而不是持續寫入和讀取此層,因此不需要存取磁碟。此緩衝區是邏輯複寫中使用的原生 PostgreSQL 快取,並在 Aurora PostgreSQL 資料庫叢集參數中識別為 rds.logical_wal_cache
。
當您將邏輯複寫與 Aurora PostgreSQL 資料庫叢集 (適用於支援寫入快取的版本) 搭配使用時,您可以監控快取命中率,以查看其對您的使用案例的運作狀態。若要這麼做,請使用 連線至 Aurora PostgreSQL 資料庫叢集的寫入執行個體,psql
然後使用 Aurora 函數 aurora_stat_logical_wal_cache
,如下列範例所示。
SELECT * FROM aurora_stat_logical_wal_cache();
此函數會傳回如下的輸出。
name | active_pid | cache_hit | cache_miss | blks_read | hit_rate | last_reset_timestamp
-----------+------------+-----------+------------+-----------+----------+--------------
test_slot1 | 79183 | 24 | 0 | 24 | 100.00% | 2022-08-05 17:39...
test_slot2 | | 1 | 0 | 1 | 100.00% | 2022-08-05 17:34...
(2 rows)
為了可讀性,last_reset_timestamp
值已縮短。如需此函數狀態的詳細資訊,請參閱 aurora_stat_logical_wal_cache。
Aurora PostgreSQL 提供下列兩個用於監控寫入快取的函數。
aurora_stat_logical_wal_cache
函數 – 如需參考文件,請參閱 aurora_stat_logical_wal_cache。aurora_stat_reset_wal_cache
函數 – 如需參考文件,請參閱 aurora_stat_reset_wal_cache。
如果您發現自動調整的WAL快取大小不足以容納工作負載,您可以rds.logical_wal_cache
手動變更 的值。考慮下列各項:
-
當
rds.logical_replication
參數停用時,rds.logical_wal_cache
會設定為零 (0)。 -
啟用
rds.logical_replication
參數時,rds.logical_wal_cache
的預設值為 16 MB。 -
rds.logical_wal_cache
參數是靜態的,需要重新啟動資料庫執行個體,變更才會生效。此參數以 8 Kb 區塊定義。請注意,任何小於 32 Kb 的正值都會視為 32 Kb。如需詳細資訊,wal_buffers
請參閱 PostgreSQL 文件中的預先寫入日誌。
管理 Aurora Postgre 的邏輯插槽SQL
在 pg_replication_origin_status
檢視中擷取串流活動。若要查看此檢視的內容,您可以使用 pg_show_replication_origin_status()
函數,如下所示:
SELECT * FROM pg_show_replication_origin_status();
您可以使用下列SQL查詢取得邏輯插槽的清單。
SELECT * FROM pg_replication_slots;
若要捨棄邏輯槽,請使用 pg_drop_replication_slot
搭配該槽的名稱,如下列命令中所示。
SELECT pg_drop_replication_slot('test_slot');