

# PERF04-BP02 評估可用選項
<a name="perf_right_database_solution_evaluate_options"></a>

 了解可用的資料庫選項，以及這些選項如何在您選取資料管理解決方案之前優化您的效能。使用負載測試，識別對您的工作負載而言很重要的資料庫指標。在探索資料庫選項時，請考慮各種層面，例如參數群組、儲存選項、記憶體、運算、讀取複本、最終一致性、連線集區，以及快取選項。嘗試使用這些不同的組態選項來改善指標。 

 **預期成果：** 一個工作負載可以具有一或多個根據資料類型使用的資料庫解決方案。資料庫功能和優勢完美符合資料特性、存取模式和工作負載要求。要優化資料庫效能和成本，您必須評估資料存取模式，以判斷適當的資料庫選項。評估可接受的查詢時間，以確保選取的資料庫選項可以符合要求。 

 **常用的反模式：** 
+  未識別資料存取模式。 
+  未意識到所選資料庫管理解決方案的組態選項。 
+  僅依靠增加執行個體大小，而不查看其他可用的組態選項。 
+  未測試所選解決方案的擴展特性。 

 

 **建立此最佳實務的優勢：** 藉由探索和嘗試使用資料庫選項，您能夠降低基礎設施成本、改善效能和可擴展性，以及減少維護工作負載所需的工作量。 

 **若未建立此最佳實務，暴露的風險等級：** 高 
+  必須優化 *一體適用* 資料庫，表示做出不必要的妥協。 
+  由於未設定資料庫解決方案以符合流量模式，因此成本更高。 
+  擴展問題可能會出現操作問題。 
+  可能無法將資料保護到所需的等級。 

## 實作指引
<a name="implementation-guidance"></a>

 了解您的工作負載資料特性，以便您可以設定資料庫選項。執行負載測試來識別您的重要效能指標和瓶頸。使用這些特性和指標，來評估資料庫選項並嘗試使用不同的組態。 


|  AWS 服務  |  Amazon RDS、Amazon Aurora  |  Amazon DynamoDB  |  Amazon DocumentDB  |  Amazon ElastiCache  |  Amazon Neptune  |  Amazon Timestream  |  Amazon Keyspaces  |  Amazon QLDB  | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  擴展運算  |  增加執行個體大小，Aurora 無伺服器執行個體會自動擴展，以回應負載中的變更  |  隨需容量模式下的自動讀取/寫入擴展，或所佈建容量模式下所佈建讀取/寫入容量的自動擴展  |  增加執行個體大小  |  增加執行個體大小、將節點新增至叢集  |  增加執行個體大小  |  自動擴展以調整容量  |  隨需容量模式下的自動讀取/寫入擴展，或所佈建容量模式下所佈建讀取/寫入容量的自動擴展  |  自動擴展以調整容量  | 
|  橫向擴展讀取  |  所有引擎都支援讀取複本。Aurora 支援自動擴展讀取複本執行個體。  |  增加已佈建的讀取容量單位  |  讀取複本  |  讀取複本  |  讀取複本。支援自動擴展讀取複本執行個體  |  自動擴展  |  增加已佈建的讀取容量單位  |  自動縱向擴展至記錄的並行限制  | 
|  橫向擴展寫入  |  增加執行個體大小、在應用程式中批次寫入、在資料庫前面新增佇列。透過跨多個執行個體的應用程式層級共用來水平擴展  |  增加已佈建的寫入容量單位。確定最佳的分區索引鍵以防止分割層級寫入限流  |  增加主要執行個體大小  |  在叢集模式下使用 Redis 跨碎片散發寫入  |  增加執行個體大小  |  寫入要求可能會在擴展時進行限流。如果遇到限流異常，請繼續以相同 (或更高) 的輸送量傳送資料以自動擴展。批次寫入以減少並行寫入要求  |  增加已佈建的寫入容量單位。確定最佳的分區索引鍵以防止分割層級寫入限流  |  自動縱向擴展至記錄的並行限制  | 
|  引擎組態  |  參數群組  |  不適用  |  參數群組  |  參數群組  |  參數群組  |  不適用  |  不適用  |  不適用  | 
|  快取  |  記億體內快取，可透過參數群組設定。與 ElastiCache for Redis 等專用快取配對，以卸載經常存取項目的請求  |  DAX (DAX) 可用的完全受管快取  |  記憶體內快取。或者，與 ElastiCache for Redis 等專用快取配對，以卸載經常存取項目的請求  |  主要功能為快取  |  使用查詢結果快取來快取唯讀查詢的結果  |  Timestream 有兩個儲存層；其中一個是高效能記憶體內層  |  部署個別的專用快取 (例如 ElastiCache for Redis)，以卸載經常存取項目的請求  |  不適用  | 
|  高可用性/災難復原  |  生產工作負載的建議組態是在第二個可用區域中執行待命執行個體，以在區域內提供彈性。  若為跨區域的彈性，可以使用 Aurora 全域資料庫  |  區域內的高可用性可以使用 DynanoDB 全域資料表跨區域複寫資料表  |  如需可用性，跨可用區域建立多個執行個體。  可以跨區域共用快照，也可以使用 DMS 複寫叢集，以提供跨區域複寫/災難復原  |  生產叢集的建議組態是在次要可用區域中建立至少一個節點。  ElastiCache Global Datastore 可以用來跨區域複寫叢集。  |  其他可用區域中的讀取複本會充當容錯移轉目標。  可以跨區域共用快照，也可以使用 Neptune 串流複寫叢集，以在兩個不同區域的兩個叢集之間複寫資料。  |  可在區域內高度使用。跨區域複寫需要使用 Timestream SDK 進行自訂應用程式開發  |  區域內的高可用性  跨區域複寫需要自訂應用程式邏輯或第三方工具  |  區域內的高可用性  若要跨區域複寫，請將 Amazon QLDB 日誌的內容匯出到 S3 儲存貯體，並設定儲存貯體進行跨區域複寫。  | 

 

 **實作步驟** 

1.  哪些組態選項適用於選取的資料庫？ 

   1.  Amazon RDS 和 Aurora 的參數群組可讓您調整常用的資料庫引擎層級設定，例如針對快取分配的記憶體或調整資料庫的時區 

   1.  針對佈建的資料庫服務，例如 Amazon RDS、Aurora、Neptune、Amazon DocumentDB，以及在 Amazon EC2 上部署的服務，您可以變更執行個體類型、佈建的儲存，以及新增讀取複本。 

   1.  DynamoDB 可讓您指定兩個容量模式：隨需和已佈建。若要處理不同的工作負載，您可以隨時在這些模式之間進行變更，以及在已佈建模式下增加分配的容量。 

1.  工作負載是大量讀取或大量寫入？  

   1.  哪些解決方案適用於卸載讀取 (讀取複本、快取等)？  

      1.  若為 DynamoDB 資料表，您可以使用 DAX 卸載讀取，以進行快取。 

      1.  對於關聯式資料庫，您可以建立一個 ElastiCache for Redis 叢集，並將您的應用程式設定為首先從快取中讀取，如果請求的項目不存在，則退回到資料庫。 

      1.  關聯式資料庫 (例如 Amazon RDS 和 Aurora) 和已佈建的 NoSQL 資料庫 (例如 Neptune 和 Amazon DocumentDB) 全都支援新增讀取複本，以卸載工作負載的讀取部分。 

      1.  無伺服器資料庫 (例如 DynamoDB) 將自動擴展。確定您已佈建足夠的讀取容量單位 (RCU) 來處理工作負載。 

   1.  哪些解決方案適用於擴增寫入 (分區索引鍵碎片、引進佇列等)？ 

      1.  對於關聯式資料庫，您可以增加執行個體的大小，以適應增加的工作負載或增加已佈建的 IOPS，以允許增加基礎儲存的輸送量。 
         +  您也可以在資料庫前面引進佇列，而不是直接寫入至資料庫。此模式允許您將擷取與資料庫分離並控制流量，因此資料庫不會癱瘓。  
         +  批次處理寫入請求而不是建立許多短期交易，有助於改善高寫入量關聯式資料庫中的輸送量。 

      1.  DynamoDB 之類的無伺服器資料庫可以自動擴展寫入輸送量，或透過調整已佈建的容量單位 (WCU) 來進行，取決於容量模式。  
         +  您仍會遇到 *常用* 分區的問題，但這時您達到特定分區索引鍵的輸送量限制。這可以透過選擇更均勻分佈的分區索引鍵，或對分區索引鍵進行寫入碎片化來緩解。  

1.  目前或預期的每秒尖峰交易 (TPS) 有多少？ 使用此流量和此容量 \$1X% 進行測試，以了解擴展特性。 

   1.  原生工具 (例如 pg\$1bench for PostgreSQL) 可以用來對資料庫進行壓力測試，並了解瓶頸和擴展特性。 

   1.  應該擷取生產類流量，以便可以將其重播，來模擬除了綜合工作負載之外的真實條件。 

1.  如果使用無伺服器或彈性可擴展運算，請測試在資料庫上進行此擴展的影響。若適用，請引進連線管理或集區，以降低對資料庫的影響。  

   1.  RDS Proxy 可以搭配 Amazon RDS 和 Aurora 使用，以管理資料庫的連線。  

   1.  無伺服器資料庫 (例如 DynamoDB) 沒有與其相關聯的連線，但會考慮佈建的容量和自動擴展政策來處理負載中的峰值。 

1.  負載是否可預測、負載中是否有峰值，以及是否有閒置期間？ 

   1.  若有閒置期間，請考慮在這些時段縮減佈建的容量或執行個體大小。Aurora Serverless V2 將根據負載自動擴增和縮減。 

   1.  針對非生產執行個體，請考慮在這些非運作時刻暫停或停止這些執行個體。 

1.  您是否需要根據存取模式和資料特性分割和分解資料模型？ 

   1.  考慮使用 AWS DMS 或 AWS SCT，將您的資料移至其他服務。 

## 實作計劃的工作量： 
<a name="level-of-effort-for-the-implementation-plan-to-establish-this-best-practice-you-must-be-aware-of-your-current-data-characteristics-and-metrics.-gathering-those-metrics-establishing-a-baseline-and-then-using-those-metrics-to-identify-the-ideal-database-configuration-options-is-a-low-to-moderate-level-of-effort.-this-is-best-validated-by-load-tests-and-experimentation."></a>

若要建立此最佳實務，您必須注意目前資料特性和指標。收集這些指標、建立基準，然後使用這些指標來識別理想的資料庫組態選項為 *低* 至 *中* 工作量。這最好由負載測試和試驗進行驗證。 

## 資源
<a name="resources"></a>

 **相關文件：** 
+  [AWS 的雲端資料庫 ](https://aws.amazon.com/products/databases/?ref=wellarchitected) 
+  [AWS 資料庫快取 ](https://aws.amazon.com/caching/database-caching/?ref=wellarchitected) 
+  [Amazon DynamoDB Accelerator ](https://aws.amazon.com/dynamodb/dax/?ref=wellarchitected) 
+  [Amazon Aurora 最佳實務 ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.BestPractices.html?ref=wellarchitected) 
+  [Amazon Redshift 效能 ](https://docs.aws.amazon.com/redshift/latest/dg/c_challenges_achieving_high_performance_queries.html?ref=wellarchitected) 
+  [Amazon Athena 10 大效能秘訣 ](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/?ref=wellarchitected) 
+  [Amazon Redshift Spectrum 最佳實務 ](https://aws.amazon.com/blogs/big-data/10-best-practices-for-amazon-redshift-spectrum/?ref=wellarchitected) 
+  [Amazon DynamoDB 最佳實務](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html?ref=wellarchitected) 

 

 **相關影片：** 
+  [AWS 專用資料庫 (DAT209-L) ](https://www.youtube.com/watch?v=q81TVuV5u28)
+ [探究 Amazon Aurora 儲存的奧秘：運作方式 (DAT309-R) ](https://www.youtube.com/watch?v=uaQEGLKtw54) 
+  [深入探討 Amazon DynamoDB：進階設計模式 (DAT403-R1) ](https://www.youtube.com/watch?v=6yqfmXiZTlM)

 **相關範例：** 
+  [Amazon DynamoDB 範例](https://github.com/aws-samples/aws-dynamodb-examples) 
+  [AWS 資料庫遷移範例](https://github.com/aws-samples/aws-database-migration-samples) 
+  [資料庫現代化研討會](https://github.com/aws-samples/amazon-rds-purpose-built-workshop) 
+  [使用 Amazon RDS for PostgreSQL 資料庫上的參數](https://github.com/awsdocs/amazon-rds-user-guide/blob/main/doc_source/Appendix.PostgreSQL.CommonDBATasks.Parameters.md) 