

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

# 使用錯誤注入查詢測試 Amazon Aurora PostgreSQL
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries"></a>

您可以使用錯誤注入查詢來測試 Aurora PostgreSQL 資料庫叢集的容錯能力。錯誤注入查詢作為 SQL 命令發出到 Amazon Aurora 執行個體。故障注入查詢可讓您損毀執行個體，以便測試容錯移轉和復原。您也可以模擬 Aurora 複本故障、磁碟故障和磁碟擁塞。所有可用的 Aurora PostgreSQL 版本都支援故障插入查詢，如下所示。
+ Aurora PostgreSQL 版本 12、13、14 版和更新版本
+ Aurora PostgreSQL 版本 11.7 版和更新版本
+ Aurora PostgreSQL 版本 10.11 版和更新版本

**Topics**
+ [測試執行個體當機](#AuroraPostgreSQL.Managing.FaultInjectionQueries.Crash)
+ [測試 Aurora 複本失敗](#AuroraPostgreSQL.Managing.FaultInjectionQueries.ReplicaFailure)
+ [測試磁碟失敗](#AuroraPostgreSQL.Managing.FaultInjectionQueries.DiskFailure)
+ [測試磁碟壅塞](#AuroraPostgreSQL.Managing.FaultInjectionQueries.DiskCongestion)

當故障注入查詢指定當機時，它會強制 Aurora PostgreSQL 資料庫執行個體發生當機。其他錯誤注入查詢會造成失敗事件的模擬，但不會造成事件發生。提交錯誤注入查詢時，您也可以指定讓失敗事件模擬發生的時間。

透過連線至 Aurora 複本的端點，您可以將錯誤注入查詢提交給您的其中一個 Aurora 複本執行個體。如需更多詳細資訊，請參閱 [Amazon Aurora 端點連線](Aurora.Overview.Endpoints.md)。

## 測試執行個體當機
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries.Crash"></a>

您可以使用錯誤注入查詢函數 `aurora_inject_crash()` 來強制讓 Aurora PostgreSQL 執行個體當機。

針對此錯誤注入查詢，將不會發生容錯移轉。如果您要測試容錯移轉，則可以在 RDS 主控台為您的資料庫叢集選擇 **Failover** (容錯移轉) 執行個體動作，或是使用 [failover-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/failover-db-cluster.html) AWS CLI 命令或 [FailoverDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_FailoverDBCluster.html) RDS API 操作。

**語法**

```
1. SELECT aurora_inject_crash ('instance' | 'dispatcher' | 'node');
```選項

此錯誤注入查詢需要下列其中一個當機類型。當機類型不區分大小寫︰

*'instance'*  
模擬 Amazon Aurora 執行個體之 PostgreSQL 相容資料庫的當機情況。

*'發送器'*  
模擬 Aurora 資料庫叢集主要執行個體上發送器的當機情況。*發送器*會將更新寫入 Amazon Aurora 資料庫叢集的叢集磁碟區。

*'node'*  
模擬 PostgreSQL 相容資料庫和 Amazon Aurora 執行個體發送器的當機情況。

## 測試 Aurora 複本失敗
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries.ReplicaFailure"></a>

您可以使用錯誤注入查詢函數 `aurora_inject_replica_failure()` 來模擬 Aurora 複本的失敗。

Aurora 複本失敗會根據指定時間間隔的指定百分比，封鎖與資料庫叢集中的 Aurora 複本或所有 Aurora 複本的複寫。當時間間隔完成，受影響的 Aurora 複本將與主要執行個體自動同步。

**語法**

```
1. SELECT aurora_inject_replica_failure(
2.    percentage_of_failure, 
3.    time_interval, 
4.    'replica_name'
5. );
```選項

此錯誤注入查詢會使用下列參數：

*percentage\$1of\$1failure*  
在失敗事件期間封鎖的複寫百分比。此值可以是介於 0 與 100 之間的雙位數數字。如果指定 0，則不會封鎖任何複寫。如果指定 100，則會封鎖所有複寫。

*time\$1interval*  
模擬 Aurora 複本失敗的時間量。間隔以秒為單位。例如，如果值為 20，則模擬會執行 20 秒。  
指定 Aurora 複本失敗事件的時間間隔時請注意。如果指定的間隔太長，而您的寫入器執行個體在失敗事件期間寫入大量資料，則 Aurora 資料庫叢集可能會假設 Aurora 複本已當機並加以取代。

*replica\$1name*  
要在其中注入失敗模擬的 Aurora 複本。指定 Aurora 複本的名稱，以模擬單一 Aurora 複本的失敗。指定空字串以模擬資料庫叢集中所有 Aurora 複本的失敗。  
若要識別複本名稱，請參閱 `server_id` 函數中的 `aurora_replica_status()` 欄。例如：  

```
postgres=> SELECT server_id FROM aurora_replica_status();
```

## 測試磁碟失敗
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries.DiskFailure"></a>

您可以使用錯誤注入查詢函數 `aurora_inject_disk_failure()` 來模擬 Aurora PostgreSQL 資料庫叢集的磁碟失敗。

在磁碟失敗模擬期間，Aurora PostgreSQL 資料庫叢集會隨機將磁碟區段標示為發生錯誤。在模擬期間將封鎖對那些區段的請求。

**語法**

```
1. SELECT aurora_inject_disk_failure(
2.    percentage_of_failure, 
3.    index, 
4.    is_disk, 
5.    time_interval
6. );
```選項

此錯誤注入查詢會使用下列參數：

*percentage\$1of\$1failure*  
在失敗事件期間標示為發生錯誤的磁碟百分比。此值可以是介於 0 與 100 之間的雙位數數字。如果指定 0，則不會將任何磁碟標示為發生錯誤。如果指定 100，則會將整個磁碟標示為發生錯誤。

*index*  
模擬失敗事件的特定資料邏輯區塊。如果超出可用的資料邏輯區塊或儲存節點資料的範圍，您會收到錯誤，告訴您可以指定的索引值上限。若要避免此錯誤，請參閱 [顯示 Aurora PostgreSQL 資料庫叢集的磁碟區狀態](AuroraPostgreSQL.Managing.VolumeStatus.md)。

*is\$1disk*  
指出注入失敗是否為邏輯區塊或儲存節點。指定 true 代表將注入失敗設定為邏輯區塊。指定 false 代表注入失敗設定為儲存節點。

*time\$1interval*  
模擬磁碟失敗的時間量。間隔以秒為單位。例如，如果值為 20，則模擬會執行 20 秒。

## 測試磁碟壅塞
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries.DiskCongestion"></a>

您可以使用錯誤注入查詢函數 `aurora_inject_disk_congestion()` 來模擬 Aurora PostgreSQL 資料庫叢集的磁碟壅塞。

在磁碟擁塞模擬期間，Aurora PostgreSQL 資料庫叢集會隨機將磁碟區段標示為擁塞。對那些區段的請求延遲將介於模擬期間的指定最小和最大延遲時間之間。

**語法**

```
1. SELECT aurora_inject_disk_congestion(
2.    percentage_of_failure, 
3.    index, 
4.    is_disk, 
5.    time_interval, 
6.    minimum, 
7.    maximum
8. );
```選項

此錯誤注入查詢會使用下列參數：

*percentage\$1of\$1failure*  
在失敗事件期間標示為擁塞的磁碟百分比。這是介於 0 和 100 之間的雙倍值。如果指定 0，則不會將任何磁碟標示為擁塞。如果指定 100，則會將整個磁碟標示為擁塞。

*index*  
用於模擬失敗事件的資料特定邏輯區塊或儲存節點。  
如果超出可用的資料邏輯區塊或儲存節點資料的範圍，您會收到錯誤，告訴您可以指定的最大索引值。若要避免此錯誤，請參閱 [顯示 Aurora PostgreSQL 資料庫叢集的磁碟區狀態](AuroraPostgreSQL.Managing.VolumeStatus.md)。

*is\$1disk*  
指出注入失敗是否為邏輯區塊或儲存節點。指定 true 代表將注入失敗設定為邏輯區塊。指定 false 代表注入失敗設定為儲存節點。

*time\$1interval*  
模擬磁碟壅塞的時間量。間隔以秒為單位。例如，如果值為 20，則模擬會執行 20 秒。

*最小值、最大值*  
最小數量和最大數量擁塞延遲 (以毫秒為單位)。有效值的範圍為 0.0 至 100.0 毫秒。標示為壅塞的磁碟區段將會於模擬期間在最小和最大數量的範圍內延遲隨機的時間。最大值必須大於最小值。