

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

# 執行個體特定的效能和資源監控
<a name="limitless-instance-monitoring"></a>

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

## 概觀
<a name="limitless-instance-monitoring-overview"></a>

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

本指南提供執行個體架構的深入技術洞見：
+ 無限架構重新整理程式、路由器和碎片
+ 何時及如何擴展每個執行個體類型以符合您的效能和容量需求
+ 如何監控、疑難排解和最佳化執行個體層級效能
+ 有效利用分散式架構的應用程式設計最佳實務

## 執行個體架構基本概念
<a name="limitless-instance-monitoring-architecture"></a>

 透過跨兩種特殊執行個體類型的功能分離來實現水平可擴展性：
+ **路由器執行個體**提供協調層 - 它們接受用戶端連線、分析查詢、協調分散式操作和彙總結果。路由器是無狀態的，表示它們不會存放資料，而且可以在沒有資料遷移的情況下新增或移除。
+ **碎片執行個體**提供資料和運算層 - 它們存放資料表資料、對本機資料執行查詢，以及處理交易。碎片具有狀態，每個碎片都擁有由一致性雜湊決定的特定資料子集。

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

### 路由器和碎片比較
<a name="limitless-instance-monitoring-comparison"></a>


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

## 監控執行個體效能
<a name="limitless-instance-monitoring-performance"></a>

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

### 偵測扭曲
<a name="limitless-instance-monitoring-skew"></a>

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

要監控的三種扭曲類型：
+ **連線扭曲**：跨路由器的用戶端連線分佈不平均
+ **工作負載扭曲**：由於熱碎片索引鍵，跨碎片的查詢負載不均勻
+ **資料扭曲**：由於碎片金鑰頻率，跨碎片的資料量不平均

### Database Insights 負載分佈
<a name="limitless-instance-monitoring-insights"></a>

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

若要存取負載分佈：

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

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

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

**運作狀態良好模式：**負載在執行個體間相對平均分佈
+ 路由器可能顯示稍微高於碎片的 AAS （協調開銷）
+ 在彼此 20% 內的碎片 AAS 值表示平衡良好

**關注模式：**在特定執行個體上大幅集中
+ 路由器負載 >70% 的一個路由器 → 連線扭曲
+ 碎片負載 >50% 的一個碎片 → 工作負載或資料扭曲
+ 碎片之間的大差異 → 調查碎片金鑰分佈

### CloudWatch 指標
<a name="limitless-instance-monitoring-cloudwatch"></a>

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

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

**調查時機：**
+ 路由器 ACU 變異數 >30% → 連線扭曲或跨碎片工作負載集中
+ 碎片 ACU 變異 >40% → 資料或工作負載扭曲
+ 任何執行個體一致達到最大 ACU → 容量限制

## 路由器監控和故障診斷
<a name="limitless-instance-monitoring-router"></a>

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

### 分佈不均勻的工作階段
<a name="limitless-instance-monitoring-router-connections"></a>

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

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

**最常見的期間：**
+ 使用 pgbench 等工具進行基準測試
+ 連線集區初始化 （許多連線快速建立）
+ 應用程式伺服器重新啟動

**補救措施：**
+ 請務必使用主控台中指定的無限端點
+ 手動平衡：擷取路由器端點，並將不同的應用程式連接到不同的路由器
+ 對於 libpq 應用程式，請使用 功能 `LOADBALANCEHOSTS`
+ 對於 JDBC 應用程式，請使用無限連線外掛程式
+ 使用 NLB 來管理工作階段和分佈

## 碎片監控和疑難排解
<a name="limitless-instance-monitoring-shard"></a>

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

### 碎片資源使用率
<a name="limitless-instance-monitoring-shard-utilization"></a>

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

**修復策略：**

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

1. **分割碎片：將**負載分散到更多碎片執行個體

**何時分割碎片：**
+ 單一碎片一致地達到 >80% 的最大 ACU
+ 受單一碎片容量限制的查詢輸送量

### 碎片資料磁碟區
<a name="limitless-instance-monitoring-shard-data"></a>

使用 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');
```

### 解決不均勻的使用率
<a name="limitless-instance-monitoring-shard-split"></a>

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

重要考量：
+ 無法控制要移動的碎片索引鍵
+ 無法復原分割而不復原分割之前所拍攝的手動快照
+ 所有執行個體，包括新的碎片，在閒置時都會使用執行個體最低 ACU

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

## 限制
<a name="limitless-instance-monitoring-limitations"></a>

請注意這些操作限制：

**路由器限制：**
+ **無法移除路由器** - 新增後，路由器會保留在叢集中
+ 仔細規劃路由器新增，以避免不必要的基準成本

**碎片限制：**
+ **碎片無法合併** - 碎片分割是單向操作
+ 僅限復原選項：從分割前拍攝的快照還原

**緩解策略：**
+ 從最低可行執行個體計數開始
+ 視需要遞增新增容量
+ 在主要拓撲變更之前拍攝快照
+ 隨著叢集成長，監控基準成本