

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

# Aurora PostgreSQL 的容錯移轉後使用叢集快取管理快速復原
<a name="AuroraPostgreSQL.cluster-cache-mgmt"></a>

針對您的 Aurora PostgreSQL 叢集發生容錯移轉後快速復原資料庫執行個體寫入器，對 Amazon Aurora PostgreSQL 使用叢集快取管理。叢集快取管理確保應用程式如果發生容錯移轉時維持效能。

在典型的容錯移轉情況中，容錯移轉後您可能會發現效能暫時大幅降低。這樣的降低情形會發生於容錯移轉資料庫執行個體啟動、但緩衝快取處於空的狀態時。空的快取也稱作 *冷快取*。冷快取會降低效能，因為資料庫執行個體需要從較慢的磁碟讀取，而非利用緩衝快取中儲存的值。

使用叢集快取管理，設定特定讀取器的資料庫執行個體作為容錯移轉的目標。叢集快取管理確保指定讀取器中的快取資料，能夠與資料庫執行個體寫入器的快取資料保持同步。預先填入值的指定讀取器快取也稱作 *熱快取*。如果容錯轉移發生，指定的讀取器立即使用熱快取的值提升到新的資料庫執行個體寫入器。此方法提供您的應用程式更佳的復原效能。

叢集快取管理要求指定的讀取器執行個體具有與編寫器相同的執行個體類別類型和大小 (例如 `db.r5.2xlarge` 或 `db.r5.xlarge`)。當您建立 Aurora PostgreSQL 資料庫叢集時，請記住這一點，以便叢集可以在容錯移轉期間復原。如需執行個體類別類型和大小的清單，請參閱 [Aurora 的資料庫執行個體類別的硬體規格](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html#Concepts.DBInstanceClass.Summary)。

**注意**  
屬於 Aurora 全球資料庫一部分的 Aurora PostgreSQL 次要資料庫叢集不支援叢集快取管理。對於支援此功能的主要叢集，建議不要在指定的層級 0 讀取器執行工作負載。

**Contents**
+ [設定叢集快取管理](#AuroraPostgreSQL.cluster-cache-mgmt.Configure)
  + [啟用叢集快取管理](#AuroraPostgreSQL.cluster-cache-mgmt.Enable)
  + [設定寫入器資料庫執行個體的提取層級優先順序](#AuroraPostgreSQL.cluster-cache-mgmt.Writer)
  + [設定讀取器資料庫執行個體的提取層級優先順序。](#AuroraPostgreSQL.cluster-cache-mgmt.Reader)
+ [監控緩衝區快取](#AuroraPostgreSQL.cluster-cache-mgmt.Monitoring)
+ [對 CCM 組態進行疑難排解](#AuroraPostgreSQL.cluster-cache-mgmt.Troubleshooting)

## 設定叢集快取管理
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Configure"></a>

若要設定叢集快取管理，請依序執行下列程序。

**Topics**
+ [啟用叢集快取管理](#AuroraPostgreSQL.cluster-cache-mgmt.Enable)
+ [設定寫入器資料庫執行個體的提取層級優先順序](#AuroraPostgreSQL.cluster-cache-mgmt.Writer)
+ [設定讀取器資料庫執行個體的提取層級優先順序。](#AuroraPostgreSQL.cluster-cache-mgmt.Reader)

**注意**  
在完成這些步驟之後，等待至少 1 分鐘，讓叢集快取管理可以開始正常運作。

### 啟用叢集快取管理
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Enable"></a>

若要啟用叢集快取管理，請執行以下所述的步驟。

#### 主控台
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Enable.CON"></a>

**若要啟用叢集快取管理**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups (參數群組)**。

1. 在清單中，針對您的 Aurora PostgreSQL 資料庫叢集選擇參數群組。

   資料庫叢集必須使用預設以外的參數群組，因為您無法變更參數群組中的值。

1. 針對 **Parameter group actions (參數群組動作)**，選擇 **Edit (編輯)**。

1. 設定叢集參數中 `apg_ccm_enabled` 的值到 ** 1 **。

1. 選擇**儲存變更**。

#### AWS CLI
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Enable.CLI"></a>

若要啟用 Aurora PostgreSQL 資料庫叢集的叢集快取管理，請使用 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster-parameter-group.html)命令搭配下列必要參數：
+ `--db-cluster-parameter-group-name`
+ `--parameters`

**Example**  
對於 Linux、macOS 或 Unix：  

```
aws rds modify-db-cluster-parameter-group \
    --db-cluster-parameter-group-name {{my-db-cluster-parameter-group}} \
    --parameters "ParameterName=apg_ccm_enabled,ParameterValue=1,ApplyMethod=immediate"
```
在 Windows 中：  

```
aws rds modify-db-cluster-parameter-group ^
    --db-cluster-parameter-group-name {{my-db-cluster-parameter-group}} ^
    --parameters "ParameterName=apg_ccm_enabled,ParameterValue=1,ApplyMethod=immediate"
```

### 設定寫入器資料庫執行個體的提取層級優先順序
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Writer"></a>

針對叢集快取管理，請確保 Aurora PostgreSQL 資料庫叢集的寫入器資料庫執行個體提取優先順序為**層級 0**。*提取層級優先順序*的值，代表容錯移轉後 Aurora 讀取器提升為寫入器資料庫執行個體的特定順序。有效的值為 0–15，0 代表最高優先順序，15代表最低優先順序。如需提取層級的詳細資訊，請參閱 [Aurora 資料庫叢集的容錯能力](Concepts.AuroraHighAvailability.md#Aurora.Managing.FaultTolerance)。

#### 主控台
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Writer.Console"></a>

**若要設定資料庫執行個體寫入器提取優先順序為層級 0**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Databases (資料庫)**。

1. 選擇 **Writer (寫入器)** Aurora PostgreSQL 資料庫叢集的資料庫執行個體。

1. 選擇 **Modify (修改)**。**Modify DB Instance** (修改資料庫執行個體) 頁面隨即出現。

1. 在 **Additional configuration (其他組態)** 面板上，為 **Failover priority (容錯移轉優先順序)** 選擇 **tier-0 (層級 0)**。

1. 選擇 **Continue (繼續)**，並檢查修改的摘要。

1. 若要在儲存後立即套用變更，選擇 **Apply immediately (立即套用)**。

1. 選擇 **Modify DB Instance (修改資料庫執行個體)**，以儲存變更。

#### AWS CLI
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Writer.CLI"></a>

若要使用 將寫入器資料庫執行個體的提升層優先順序設定為 0 AWS CLI，請使用下列必要參數呼叫 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--promotion-tier`
+ `--apply-immediately`



**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier {{writer-db-instance}} \
    --promotion-tier 0 \
    --apply-immediately
```
在 Windows 中：  

```
aws rds modify-db-instance ^
    --db-instance-identifier {{writer-db-instance}} ^
    ---promotion-tier 0  ^
    --apply-immediately
```

 

### 設定讀取器資料庫執行個體的提取層級優先順序。
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Reader"></a>

您必須為叢集快取管理設定唯一的讀取器資料庫執行個體。若要執行此作業，請從 Aurora PostgreSQL 叢集選擇與資料庫執行個體寫入器相同執行個體類別和大小的讀取器。例如，如果編寫器使用 `db.r5.xlarge`，請選擇使用此相同執行個體類別類型和大小的讀取器。然後設定提升層級優先順序為 0。

*提取層級優先順序*的值，代表容錯移轉後 Aurora 讀取器提升為寫入器資料庫執行個體的特定順序。有效的值為 0–15，0 代表最高優先順序，15 代表最低優先順序。

#### 主控台
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Reader.Console"></a>

**設定資料庫執行個體讀取器的提取層級優先順序到 0。**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Databases (資料庫)**。

1. 選擇與資料庫執行個體寫入器相同執行個體類別 Aurora PostgreSQL 資料庫叢集的資料庫執行個體 **Reader (讀取器)**。

1. 選擇 **Modify (修改)**。**Modify DB Instance** (修改資料庫執行個體) 頁面隨即出現。

1. 在 **Additional configuration (其他組態)** 面板上，為 **Failover priority (容錯移轉優先順序)** 選擇 **tier-0 (層級 0)**。

1. 選擇 **Continue (繼續)**，並檢查修改的摘要。

1. 若要在儲存後立即套用變更，選擇 **Apply immediately (立即套用)**。

1. 選擇 **Modify DB Instance (修改資料庫執行個體)**，以儲存變更。

#### AWS CLI
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Reader.CLI"></a>

若要使用 將讀取器資料庫執行個體的提升層優先順序設定為 0 AWS CLI，請使用下列必要參數呼叫 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--promotion-tier`
+ `--apply-immediately`



**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier {{reader-db-instance}} \
    --promotion-tier 0 \
    --apply-immediately
```
在 Windows 中：  

```
aws rds modify-db-instance ^
    --db-instance-identifier {{reader-db-instance}} ^
    ---promotion-tier 0  ^
    --apply-immediately
```

 

## 監控緩衝區快取
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Monitoring"></a>

在設定叢集快取管理後，您可以監控資料庫執行個體寫入器緩衝快取和指定讀取器熱緩衝快取間的同步狀態。若要檢查資料庫執行個體寫入器與指定資料庫執行個體讀取器的熱快取內容，請使用 PostgreSQL `pg_buffercache` 模組。如需詳細資訊，請參閱 [PostgreSQL `pg_buffercache` 文件](https://www.postgresql.org/docs/current/pgbuffercache.html)。

**使用 `aurora_ccm_status` 函數**  
叢集快取管理也提供 `aurora_ccm_status` 函數。使用資料庫執行個體寫入器上的 `aurora_ccm_status` 函數以獲得下列關於指定讀取器上熱快取進度的資訊：
+ `buffers_sent_last_minute` – 最後一分鐘有多少緩衝區送到指定的讀取器。
+ `buffers_found_last_minute` – 過去一分鐘內識別出頻繁存取緩衝區的數量。
+ `buffers_sent_last_scan` – 最後完成緩衝區快取掃描時有多少緩衝區送到指定的讀取器。
+ `buffers_found_last_scan` – 有多少緩衝已經辨識為經常許可並需要在最後完成緩衝快取掃描時送出。緩衝區指定讀取器上未送出的快取。
+ `buffers_sent_current_scan` – 截至目前掃描送出多少緩衝區。
+ `buffers_found_current_scan` – 目前掃描有多少緩衝區已經辨識為經常許可。
+ `current_scan_progress` – 目前的掃描期間迄今已造訪多少緩衝區。

以下範例示範如何使用 `aurora_ccm_status` 函數將一些輸出轉換為暖比率和暖百分比。

```
SELECT buffers_sent_last_minute*8/60 AS warm_rate_kbps, 
   100*(1.0-buffers_sent_last_scan::float/buffers_found_last_scan) AS warm_percent 
   FROM aurora_ccm_status();
```

## 對 CCM 組態進行疑難排解
<a name="AuroraPostgreSQL.cluster-cache-mgmt.Troubleshooting"></a>

 當您啟用 `apg_ccm_enabled` 叢集參數時，系統會在寫入器資料庫執行個體的執行個體層級自動開啟叢集快取管理，並在 Aurora PostgreSQL 資料庫叢集自動開啟一個讀取器資料庫執行個體。寫入器和讀取器執行個體應使用相同的執行個體類別類型和大小。其提升層優先順序會設為 `0`。資料庫叢集中的其他讀取器執行個體應具有非零的提升層，且會針對那些執行個體停用叢集快取管理。

下列原因可能會導致組態發生問題，以及停用叢集快取管理：
+ 未將單一讀取器資料庫執行個體設為提升層 0 時。
+ 未將寫入器資料庫執行個體設為提升層 0 時。
+ 將多個讀取器資料庫執行個體設為提升層 0 時。
+ 當具有提升層 0 的寫入器和一個讀取器資料庫執行個體的執行個體大小不同時。