本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
監控 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');