本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行個體特定的效能和資源監控
在執行個體層級上監控是了解連線扭曲、工作負載扭曲和資料扭曲的關鍵,以及何時新增路由器或分割碎片,以利用保留延遲來擴展更高輸送量。
概觀
當您的應用程式對 發出查詢時,該請求會在傳回結果之前周遊複雜的分散式系統。看似簡單的SELECT陳述式可能會觸動多個資料庫執行個體,每個執行個體在處理您的請求時都扮演不同的角色。了解此旅程,以及驅動它的執行個體,會改變您設計應用程式、解譯監控資料和診斷效能問題的方式。
本指南提供執行個體架構的深入技術洞見:
無限架構重新整理程式、路由器和碎片
何時及如何擴展每個執行個體類型以符合您的效能和容量需求
如何監控、疑難排解和最佳化執行個體層級效能
有效利用分散式架構的應用程式設計最佳實務
執行個體架構基本概念
透過跨兩種特殊執行個體類型的功能分離來實現水平可擴展性:
路由器執行個體提供協調層 - 它們接受用戶端連線、分析查詢、協調分散式操作和彙總結果。路由器是無狀態的,表示它們不會存放資料,而且可以在沒有資料遷移的情況下新增或移除。
碎片執行個體提供資料和運算層 - 它們存放資料表資料、對本機資料執行查詢,以及處理交易。碎片具有狀態,每個碎片都擁有由一致性雜湊決定的特定資料子集。
此區隔可讓 根據您的工作負載特性獨立擴展連線處理、查詢協調和資料儲存。
路由器和碎片比較
| 特性 | 路由器執行個體 | 碎片執行個體 |
|---|---|---|
| 主要角色 | 查詢協調和分佈 | 資料儲存和查詢執行 |
| State | 無狀態 (無資料儲存) | 狀態 (擁有資料) |
| 可擴展性 | 立即新增/移除 | 需要重新平衡資料 |
| 資源焦點 | 用於協調的 CPU;中等記憶體 | 查詢的 CPU;快取的高記憶體 |
| 擴展觸發 | 高連線計數、分散式 txn 速率 | 高 CPU、資料磁碟區、查詢輸送量 |
監控執行個體效能
了解執行個體層級效能對於有效運作至關重要。執行個體特定的監控會顯示會影響效能的分佈模式:連線扭曲、工作負載扭曲和資料扭曲。
偵測扭曲
在理想的部署中,工作負載和資源會在執行個體之間平均分配。實際上,應用程式經常遇到扭曲,不均勻的分佈會集中在特定執行個體上的負載。
要監控的三種扭曲類型:
連線扭曲:跨路由器的用戶端連線分佈不平均
工作負載扭曲:由於熱碎片索引鍵,跨碎片的查詢負載不均勻
資料扭曲:由於碎片金鑰頻率,跨碎片的資料量不平均
Database Insights 負載分佈
評估執行個體層級運作狀態的最快方法是 Database Insights 的負載分佈檢視,可讓您立即了解 Active Sessions 如何在執行個體間分佈。
若要存取負載分佈:
導覽至 RDS 主控台 → 您的無限叢集
選取「績效詳情」索引標籤
按一下「載入分佈」區段
運作狀態良好模式:負載在執行個體間相對平均分佈
路由器可能顯示稍微高於碎片的 AAS (協調開銷)
在彼此 20% 內的碎片 AAS 值表示平衡良好
關注模式:在特定執行個體上大幅集中
路由器負載 >70% 的一個路由器 → 連線扭曲
碎片負載 >50% 的一個碎片 → 工作負載或資料扭曲
碎片之間的大差異 → 調查碎片金鑰分佈
CloudWatch 指標
針對 Database Insights 以外的深入分析,CloudWatch 提供執行個體特定的指標,可顯示資源使用率模式。
具有維度的ServerlessDatabaseCapacity指標DBShardGroupInstance會顯示每個執行個體的 ACU 耗用量,提供資源使用率的最直接檢視。
調查時機:
路由器 ACU 變異數 >30% → 連線扭曲或跨碎片工作負載集中
碎片 ACU 變異 >40% → 資料或工作負載扭曲
任何執行個體一致達到最大 ACU → 容量限制
路由器監控和故障診斷
路由器可能會遇到兩個主要原因的效能問題:連線分佈不均和跨碎片工作負載集中。
分佈不均勻的工作階段
徵狀:一個路由器處理不成比例的連線份額
根本原因:DNS 快取會導致多個連線請求解析為相同的路由器端點。
最常見的期間:
使用 pgbench 等工具進行基準測試
連線集區初始化 (許多連線快速建立)
應用程式伺服器重新啟動
補救措施:
請務必使用主控台中指定的無限端點
手動平衡:擷取路由器端點,並將不同的應用程式連接到不同的路由器
對於 libpq 應用程式,請使用 功能
LOADBALANCEHOSTS對於 JDBC 應用程式,請使用無限連線外掛程式
使用 NLB 來管理工作階段和分佈
碎片監控和疑難排解
碎片遇到三個主要原因的效能問題:資源限制、資料扭曲和工作負載扭曲。
碎片資源使用率
具有熱門碎片索引鍵的碎片將擁有更多資料和更高的工作負載。這將資訊清單顯示為資源使用率,即執行個體將耗用更多 ACUs。
修復策略:
重新評估碎片金鑰選擇:檢閱碎片金鑰基數和存取模式。請考慮複合碎片索引鍵,以獲得更好的分佈。
分割碎片:將負載分散到更多碎片執行個體
何時分割碎片:
單一碎片一致地達到 >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
分割碎片允許進一步擴展,而連續碎片分割是通往更高輸送量和進一步擴展的路徑,同時保持低延遲。
限制
請注意這些操作限制:
路由器限制:
無法移除路由器 - 新增後,路由器會保留在叢集中
仔細規劃路由器新增,以避免不必要的基準成本
碎片限制:
碎片無法合併 - 碎片分割是單向操作
僅限復原選項:從分割前拍攝的快照還原
緩解策略:
從最低可行執行個體計數開始
視需要遞增新增容量
在主要拓撲變更之前拍攝快照
隨著叢集成長,監控基準成本