View a markdown version of this page

執行個體特定的效能和資源監控 - Amazon Aurora

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

執行個體特定的效能和資源監控

在執行個體層級上監控是了解連線扭曲、工作負載扭曲和資料扭曲的關鍵,以及何時新增路由器或分割碎片,以利用保留延遲來擴展更高輸送量。

概觀

當您的應用程式對 發出查詢時,該請求會在傳回結果之前周遊複雜的分散式系統。看似簡單的SELECT陳述式可能會觸動多個資料庫執行個體,每個執行個體在處理您的請求時都扮演不同的角色。了解此旅程,以及驅動它的執行個體,會改變您設計應用程式、解譯監控資料和診斷效能問題的方式。

本指南提供執行個體架構的深入技術洞見:

  • 無限架構重新整理程式、路由器和碎片

  • 何時及如何擴展每個執行個體類型以符合您的效能和容量需求

  • 如何監控、疑難排解和最佳化執行個體層級效能

  • 有效利用分散式架構的應用程式設計最佳實務

執行個體架構基本概念

透過跨兩種特殊執行個體類型的功能分離來實現水平可擴展性:

  • 路由器執行個體提供協調層 - 它們接受用戶端連線、分析查詢、協調分散式操作和彙總結果。路由器是無狀態的,表示它們不會存放資料,而且可以在沒有資料遷移的情況下新增或移除。

  • 碎片執行個體提供資料和運算層 - 它們存放資料表資料、對本機資料執行查詢,以及處理交易。碎片具有狀態,每個碎片都擁有由一致性雜湊決定的特定資料子集。

此區隔可讓 根據您的工作負載特性獨立擴展連線處理、查詢協調和資料儲存。

路由器和碎片比較

特性 路由器執行個體 碎片執行個體
主要角色 查詢協調和分佈 資料儲存和查詢執行
State 無狀態 (無資料儲存) 狀態 (擁有資料)
可擴展性 立即新增/移除 需要重新平衡資料
資源焦點 用於協調的 CPU;中等記憶體 查詢的 CPU;快取的高記憶體
擴展觸發 高連線計數、分散式 txn 速率 高 CPU、資料磁碟區、查詢輸送量

監控執行個體效能

了解執行個體層級效能對於有效運作至關重要。執行個體特定的監控會顯示會影響效能的分佈模式:連線扭曲、工作負載扭曲和資料扭曲。

偵測扭曲

在理想的部署中,工作負載和資源會在執行個體之間平均分配。實際上,應用程式經常遇到扭曲,不均勻的分佈會集中在特定執行個體上的負載。

要監控的三種扭曲類型:

  • 連線扭曲:跨路由器的用戶端連線分佈不平均

  • 工作負載扭曲:由於熱碎片索引鍵,跨碎片的查詢負載不均勻

  • 資料扭曲:由於碎片金鑰頻率,跨碎片的資料量不平均

Database Insights 負載分佈

評估執行個體層級運作狀態的最快方法是 Database Insights 的負載分佈檢視,可讓您立即了解 Active Sessions 如何在執行個體間分佈。

若要存取負載分佈:

  1. 導覽至 RDS 主控台 → 您的無限叢集

  2. 選取「績效詳情」索引標籤

  3. 按一下「載入分佈」區段

運作狀態良好模式:負載在執行個體間相對平均分佈

  • 路由器可能顯示稍微高於碎片的 AAS (協調開銷)

  • 在彼此 20% 內的碎片 AAS 值表示平衡良好

關注模式:在特定執行個體上大幅集中

  • 路由器負載 >70% 的一個路由器 → 連線扭曲

  • 碎片負載 >50% 的一個碎片 → 工作負載或資料扭曲

  • 碎片之間的大差異 → 調查碎片金鑰分佈

CloudWatch 指標

針對 Database Insights 以外的深入分析,CloudWatch 提供執行個體特定的指標,可顯示資源使用率模式。

具有維度的ServerlessDatabaseCapacity指標DBShardGroupInstance會顯示每個執行個體的 ACU 耗用量,提供資源使用率的最直接檢視。

調查時機:

  • 路由器 ACU 變異數 >30% → 連線扭曲或跨碎片工作負載集中

  • 碎片 ACU 變異 >40% → 資料或工作負載扭曲

  • 任何執行個體一致達到最大 ACU → 容量限制

路由器監控和故障診斷

路由器可能會遇到兩個主要原因的效能問題:連線分佈不均和跨碎片工作負載集中。

分佈不均勻的工作階段

徵狀:一個路由器處理不成比例的連線份額

根本原因:DNS 快取會導致多個連線請求解析為相同的路由器端點。

最常見的期間:

  • 使用 pgbench 等工具進行基準測試

  • 連線集區初始化 (許多連線快速建立)

  • 應用程式伺服器重新啟動

補救措施:

  • 請務必使用主控台中指定的無限端點

  • 手動平衡:擷取路由器端點,並將不同的應用程式連接到不同的路由器

  • 對於 libpq 應用程式,請使用 功能 LOADBALANCEHOSTS

  • 對於 JDBC 應用程式,請使用無限連線外掛程式

  • 使用 NLB 來管理工作階段和分佈

碎片監控和疑難排解

碎片遇到三個主要原因的效能問題:資源限制、資料扭曲和工作負載扭曲。

碎片資源使用率

具有熱門碎片索引鍵的碎片將擁有更多資料和更高的工作負載。這將資訊清單顯示為資源使用率,即執行個體將耗用更多 ACUs。

修復策略:

  1. 重新評估碎片金鑰選擇:檢閱碎片金鑰基數和存取模式。請考慮複合碎片索引鍵,以獲得更好的分佈。

  2. 分割碎片:將負載分散到更多碎片執行個體

何時分割碎片:

  • 單一碎片一致地達到 >80% 的最大 ACU

  • 受單一碎片容量限制的查詢輸送量

碎片資料磁碟區

使用 SQL 函數查詢資料磁碟區:

SELECT subcluster_id, subcluster_type, pg_size_pretty(db_size) FROM rds_aurora.limitless_stat_database_size('postgres_limitless') ORDER BY 1;

若要檢視每個資料表和每個碎片資料:

SELECT * FROM rds_aurora.limitless_stat_relation_sizes('public', 'table_name');

解決不均勻的使用率

當工作負載或資料扭曲集中在特定碎片上時,分割碎片會將負載重新分配到更多執行個體。

重要考量:

  • 無法控制要移動的碎片索引鍵

  • 無法復原分割而不復原分割之前所拍攝的手動快照

  • 所有執行個體,包括新的碎片,在閒置時都會使用執行個體最低 ACU

分割碎片允許進一步擴展,而連續碎片分割是通往更高輸送量和進一步擴展的路徑,同時保持低延遲。

限制

請注意這些操作限制:

路由器限制:

  • 無法移除路由器 - 新增後,路由器會保留在叢集中

  • 仔細規劃路由器新增,以避免不必要的基準成本

碎片限制:

  • 碎片無法合併 - 碎片分割是單向操作

  • 僅限復原選項:從分割前拍攝的快照還原

緩解策略:

  • 從最低可行執行個體計數開始

  • 視需要遞增新增容量

  • 在主要拓撲變更之前拍攝快照

  • 隨著叢集成長,監控基準成本