

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 監控 Aurora PostgreSQL 邏輯複寫的全部寫入快取和邏輯槽
<a name="AuroraPostgreSQL.Replication.Logical-monitoring"></a>

監控邏輯複寫全部寫入快取並管理邏輯槽，以改善 Aurora PostgreSQL 資料庫叢集的效能。以下請見全部寫入快取和邏輯槽的詳細資訊。

**Topics**
+ [

## 監控 Aurora PostgreSQL 邏輯複寫全部寫入快取
](#AuroraPostgreSQL.Replication.Logical-write-through-cache)
+ [

## 管理 Aurora PostgreSQL 的邏輯槽
](#AuroraPostgreSQL.Replication.Logical.Configure.managing-logical-slots)

## 監控 Aurora PostgreSQL 邏輯複寫全部寫入快取
<a name="AuroraPostgreSQL.Replication.Logical-write-through-cache"></a>

根據預設，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 資料庫叢集 (適用於支援直接寫入式快取的版本) 時，您可以監控快取命中率，以查看其在您使用案例中的運作有多好。若要這麼做，請使用 `psql` 連線至 Aurora PostgreSQL 資料庫叢集的寫入執行個體，然後使用 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\$1stat\$1logical\$1wal\$1cache](aurora_stat_logical_wal_cache.md)。

Aurora PostgreSQL 提供下列兩個函數，用於監控直接寫入式快取。
+ `aurora_stat_logical_wal_cache` 函數 – 如需參考文件，請參閱 [aurora\$1stat\$1logical\$1wal\$1cache](aurora_stat_logical_wal_cache.md)。
+ `aurora_stat_reset_wal_cache` 函數 – 如需參考文件，請參閱 [aurora\$1stat\$1reset\$1wal\$1cache](aurora_stat_reset_wal_cache.md)。

如果發現自動調整的 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 文件中的[預寫日誌](https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-SETTINGS)。

## 管理 Aurora PostgreSQL 的邏輯槽
<a name="AuroraPostgreSQL.Replication.Logical.Configure.managing-logical-slots"></a>

在 `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');
```