

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

# Amazon Aurora PostgreSQL 的效能和擴展
<a name="AuroraPostgreSQL.Managing"></a>

下列幾節說明如何管理 Amazon Aurora PostgreSQL 資料庫叢集的效能和擴展功能。也包括其他維護任務的相關資訊。

**Topics**
+ [擴展 Aurora PostgreSQL 資料庫執行個體](#AuroraPostgreSQL.Managing.Performance.InstanceScaling)
+ [對 Aurora PostgreSQL 資料庫執行個體的連線數上限](#AuroraPostgreSQL.Managing.MaxConnections)
+ [Aurora PostgreSQL 的暫存空間限制](#AuroraPostgreSQL.Managing.TempStorage)
+ [Aurora PostgreSQL 的巨型分頁](#AuroraPostgreSQL.Managing.HugePages)
+ [使用錯誤注入查詢測試 Amazon Aurora PostgreSQL](AuroraPostgreSQL.Managing.FaultInjectionQueries.md)
+ [顯示 Aurora PostgreSQL 資料庫叢集的磁碟區狀態](AuroraPostgreSQL.Managing.VolumeStatus.md)
+ [指定 stats\$1temp\$1directory 的 RAM 磁碟](AuroraPostgreSQL.Managing.RamDisk.md)
+ [使用 PostgreSQL 管理暫存檔案](PostgreSQL.ManagingTempFiles.md)

## 擴展 Aurora PostgreSQL 資料庫執行個體
<a name="AuroraPostgreSQL.Managing.Performance.InstanceScaling"></a>

有兩種方式可以擴展 Aurora PostgreSQL 資料庫執行個體：執行個體擴展和讀取擴展。如需讀取擴展的詳細資訊，請參閱[讀取擴展](Aurora.Managing.Performance.md#Aurora.Managing.Performance.ReadScaling)。

您可以修改資料庫叢集中每個資料庫執行個體的資料庫執行個體類別，來擴展 Aurora PostgreSQL 資料庫叢集。Aurora PostgreSQL 支援數個針對 Aurora 最佳化的資料庫執行個體類別。針對大小超過 40 TB 的較大 Aurora 叢集，請勿使用 db.t2 或 db.t3 執行個體類別。

**注意**  
建議您在開發、測試伺服器或其他非生產伺服器時，僅使用 T 資料庫執行個體類別。如需詳細了解 T 執行個體類別，請參閱 [資料庫執行個體類別的類型](Concepts.DBInstanceClass.Types.md)。

擴展並非即時進行。可能需要 15 分鐘或更長時間，才能完成對其他資料庫執行個體類別做的變更。若您使用此方法修改資料庫執行個體類別，請在下一個排程維護時段 (而非立即) 套用變更，以避免影響使用者。

作為修改資料庫執行個體類別的直接替代方法，您可以使用 Amazon Aurora 的高可用性功能來盡力減少停機時間。首先，請將 Aurora 複本新增至您的叢集。在建立複本時，請選擇要用於叢集的資料庫執行個體類別規模。在 Aurora 複本與叢集同步時，您便可以容錯移轉為新增的複本。如需了解詳細資訊，請參閱 [Aurora 複本](Aurora.Replication.md#Aurora.Replication.Replicas) 和 [Amazon Aurora PostgreSQL 的快速容錯移轉](AuroraPostgreSQL.BestPractices.FastFailover.md)。

如需 Aurora PostgreSQL 支援資料庫執行個體類別的詳細規格，請參閱[資料庫執行個體類別的支援資料庫引擎](Concepts.DBInstanceClass.SupportAurora.md)。

## 對 Aurora PostgreSQL 資料庫執行個體的連線數上限
<a name="AuroraPostgreSQL.Managing.MaxConnections"></a>

Aurora PostgreSQL 資料庫叢集會根據資料庫執行個體類別及其可用記憶體分配資來源。與資料庫叢集的每個連線都會遞增地佔用這些資源，例如記憶體和 CPU 資源。每個連線佔用的記憶體會因查詢類型、計數及是否使用臨時資料表而有所不同。即使是閒置連線也會佔用記憶體和 CPU。這是因為當查詢在連線上執行時，會為每個查詢分配更多的記憶體，且即使停止處理，也不會將其完全釋放。因此，我們建議您確保您的應用程式不會在閒置連線上等待：每一個閒置連線都會浪費資源並對效能產生負面影響。如需詳細資訊，請參閱 [Resources consumed by idle PostgreSQL connections](https://aws.amazon.com/blogs/database/resources-consumed-by-idle-postgresql-connections/) (閒置 PostgreSQL 連線所佔用的資源)。

允許對 Aurora PostgreSQL 資料庫執行個體建立的連線數上限，由資料庫執行個體的執行個體參數群組中指定的 `max_connections` 參數決定。`max_connections` 參數的理想設定是支援應用程式所需的所有用戶端連線，而不會超過未使用的連線，以及至少 3 個支援 AWS 自動化的連線。在修改 `max_connections` 參數設定之前，建議您考慮下列內容：
+ 如果 `max_connections` 值太低，用戶端嘗試連線時 Aurora PostgreSQL 資料庫執行個體可能會沒有足夠的可用連線。若發生這種情況，則嘗試使用 `psql` 連線將引發下列錯誤訊息：

  ```
  psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
  ```
+ 如果 `max_connections` 值超過實際需要的連線數，未使用的連線可能會導致效能降低。

`max_connections` 的預設值是從下列 Aurora PostgreSQL `LEAST` 函數所衍生的：

`LEAST({DBInstanceClassMemory/9531392},5000)`.

若您想變更 `max_connections` 值，您需要建立自訂資料庫叢集參數群組並在其中變更其值。將自訂資料庫參數群組套用至叢集後，請務必重新啟動主執行個體，新的值才會生效。如需詳細資訊，請參閱[Amazon Aurora PostgreSQL 參數](AuroraPostgreSQL.Reference.ParameterGroups.md)及[在 Amazon Aurora 中建立資料庫叢集參數群組](USER_WorkingWithParamGroups.CreatingCluster.md)。

**提示**  
如果您的應用程式經常開啟和關閉連線，或者保持大量長期連線開啟，我們建議您使用 Amazon RDS Proxy。RDS 代理是個完全受管、高可用性的資料庫代理，其使用連線集區，安全且高效地共用資料庫連線。如要進一步了解 RDS 代理，請參閱 [Amazon RDS Proxy for Aurora](rds-proxy.md)。

 如需 Aurora Serverless v2 執行個體處理此參數的詳細資訊，請參閱 [Aurora Serverless v2 的連線數上限](aurora-serverless-v2.setting-capacity.md#aurora-serverless-v2.max-connections)。

## Aurora PostgreSQL 的暫存空間限制
<a name="AuroraPostgreSQL.Managing.TempStorage"></a>

Aurora PostgreSQL 會將資料表和索引儲存在 Aurora 儲存子系統。Aurora PostgreSQL 對非持久性暫存檔案會使用個別的暫存空間。這包括用於查詢處理期間排序大型資料集或用於索引建置作業等目的的檔案。如需詳細資訊，請參閱[如何在 Aurora PostgreSQL 相容的執行個體中針對本機儲存體問題進行疑難排解？](https://repost.aws/knowledge-center/postgresql-aurora-storage-issue)一文。

這些本機儲存磁碟區由 Amazon Elastic Block Store 支援，且可透過使用更大的資料庫執行個體類別來擴充。如需儲存體的詳細資訊，請參閱[Amazon Aurora 儲存體](Aurora.Overview.StorageReliability.md)。您也可以使用啟用 NVMe 的執行個體類型和啟用 Aurora 最佳化讀取的暫存物件，來增加暫存物件的本機儲存體。如需詳細資訊，請參閱[使用 Aurora Optimized Reads 改善 Aurora PostgreSQL 的查詢效能](AuroraPostgreSQL.optimized.reads.md)。

**注意**  
當擴充資料庫執行個體時，例如從 db.r5.2xlarge 擴充到 db.r5.4xlarge，您可能會看見 `storage-optimization` 事件。

下表顯示每個 Aurora PostgreSQL 資料庫執行個體類別可用的暫存空間容量上限。如需 Aurora 之資料庫執行個體類別支援的詳細資訊，請參閱 [Amazon Aurora 資料庫執行個體類別](Concepts.DBInstanceClass.md)。


| DB instance class (資料庫執行個體類別) | 可用的暫存空間上限 (GiB) | 
| --- | --- | 
| db.x2g.16xlarge | 1829 | 
| db.x2g.12xlarge | 1606 | 
| db.x2g.8xlarge | 1071 | 
| db.x2g.4xlarge | 535 | 
| db.x2g.2xlarge | 268 | 
| db.x2g.xlarge | 134 | 
| db.x2g.large | 67 | 
| db.r8g.48xlarge | 3072 | 
| db.r8g.24xlarge | 1536 | 
| db.r8g.16xlarge | 998 | 
| db.r8g.12xlarge | 749 | 
| db.r8g.8xlarge | 499 | 
| db.r8g.4xlarge | 250 | 
| db.r8g.2xlarge | 125 | 
| db.r8g.xlarge | 63 | 
| db.r8g.large | 31 | 
| db.r7g.16xlarge | 1008 | 
| db.r7g.12xlarge | 756 | 
| db.r7g.8xlarge | 504 | 
| db.r7g.4xlarge | 252 | 
| db.r7g.2xlarge | 126 | 
| db.r7g.xlarge | 63 | 
| db.r7g.large | 32 | 
| db.r7i.48xlarge | 3072 | 
| db.r7i.24xlarge | 1500 | 
| db.r7i.16xlarge | 1008 | 
| db.r7i.12xlarge | 748 | 
| db.r7i.8xlarge | 504 | 
| db.r7i.4xlarge | 249 | 
| db.r7i.2xlarge | 124 | 
| db.r7i.xlarge | 62 | 
| db.r7i.large | 31 | 
| db.r6g.16xlarge | 1008 | 
| db.r6g.12xlarge | 756 | 
| db.r6g.8xlarge | 504 | 
| db.r6g.4xlarge | 252 | 
| db.r6g.2xlarge | 126 | 
| db.r6g.xlarge | 63 | 
| db.r6g.large | 32 | 
| db.r6i.32xlarge | 1829 | 
| db.r6i.24xlarge | 1500 | 
| db.r6i.16xlarge | 1008 | 
| db.r6i.12xlarge | 748 | 
| db.r6i.8xlarge | 504 | 
| db.r6i.4xlarge | 249 | 
| db.r6i.2xlarge | 124 | 
| db.r6i.xlarge | 62 | 
| db.r6i.large | 31 | 
| db.r5.24xlarge | 1500 | 
| db.r5.16xlarge | 1008 | 
| db.r5.12xlarge | 748 | 
| db.r5.8xlarge | 504 | 
| db.r5.4xlarge | 249 | 
| db.r5.2xlarge | 124 | 
| db.r5.xlarge | 62 | 
| db.r5.large | 31 | 
| db.r4.16xlarge | 960 | 
| db.r4.8xlarge | 480 | 
| db.r4.4xlarge | 240 | 
| db.r4.2xlarge | 120 | 
| db.r4.xlarge | 60 | 
| db.r4.large | 30 | 
| db.t4g.large | 16.5 | 
| db.t4g.medium | 8.13 | 
| db.t3.large | 16 | 
| db.t3.medium | 7.5 | 

**注意**  
啟用 NVMe 的執行個體類型可將可用暫存空間增加至最高可達 NVMe 的大小總計。如需詳細資訊，請參閱[使用 Aurora Optimized Reads 改善 Aurora PostgreSQL 的查詢效能](AuroraPostgreSQL.optimized.reads.md)。

您可以使用 `FreeLocalStorage` CloudWatch 指標來監控資料庫執行個體可用的暫存空間，如 [Amazon Aurora 的 Amazon CloudWatch 指標](Aurora.AuroraMonitoring.Metrics.md) 中所述。(這不適用於 Aurora Serverless v2。)

對於某些工作負載，您可以針對執行該操作的處理程序配置更多記憶體，以減少暫存空間容量。若要增加可用於操作的記憶體，請增加 [work\$1mem](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM) 或 [maintenance\$1work\$1mem](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM) PostgreSQL 參數的值。

## Aurora PostgreSQL 的巨型分頁
<a name="AuroraPostgreSQL.Managing.HugePages"></a>

*巨型分頁*是一項記憶體管理功能，可減少資料庫執行個體處理大型連續記憶體區塊 (如共用緩衝區使用的記憶體區塊) 時的額外負荷。所有目前可用的 Aurora PostgreSQL 版本都支援此 PostgreSQL 功能。

對於 t3.medium,db.t3.large、db.t4g.medium、db.t4g.large 類別以外的所有資料庫執行個體類別，預設為開啟 `Huge_pages` 參數。您無法在 Aurora PostgreSQL 的受支援執行個體類別中變更 `huge_pages` 參數值或關閉此功能。

在不支援巨型分頁記憶體功能的 Aurora PostgreSQL 資料庫執行個體，特定程序記憶體用量可能會增加，而不會造成對應的工作負載變更。

系統會在伺服器啟動期間分配共用記憶體區段，例如緩衝區快取。當巨型記憶體分頁無法使用時，系統不會向郵件管理員程序收取這些分配的費用。相反地，其包含在共用記憶體區段中第一次存取每個 4KB 頁面的程序中的記憶體。

**注意**  
無論跨程序追蹤共用記憶體用量的方式為何，作用中連線都會視需要共用分配的記憶體。