

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

# IPC:ProcArrayGroupUpdate
<a name="apg-rpg-ipcprocarraygroup"></a>

當工作階段正在等待群組領導者在該操作結束時更新交易狀態時，就會`IPC:ProcArrayGroupUpdate`發生事件。雖然 PostgreSQL 通常會將 IPC 類型等待事件與平行查詢操作建立關聯，但此特定等待事件並非平行查詢特有的。

**Topics**
+ [支援的引擎版本](#apg-rpg-ipcprocarraygroup.supported)
+ [Context](#apg-rpg-ipcprocarraygroup.context)
+ [等待時間增加的可能原因](#apg-rpg-ipcprocarraygroup.causes)
+ [動作](#apg-rpg-ipcprocarraygroup.actions)

## 支援的引擎版本
<a name="apg-rpg-ipcprocarraygroup.supported"></a>

所有 RDS for PostgreSQL 的版本都支援此等待事件資訊。

## Context
<a name="apg-rpg-ipcprocarraygroup.context"></a>

**了解程序陣列** – 程序 (proc) 陣列是 PostgreSQL 中的共用記憶體結構。它保留所有執行中程序的相關資訊，包括交易詳細資訊。在交易完成期間 (`COMMIT` 或 `ROLLBACK`)，需要更新 ProcArray，以反映變更並從陣列清除 transactionID。嘗試完成其交易的工作階段必須在 ProcArray 上取得專屬鎖定。這可防止其他程序取得共用或獨佔鎖定。

**群組更新機制** – 執行 COMMIT 或 ROLLBACK 時，如果後端程序無法在獨佔模式中取得 ProcArrayLock，則會更新稱為 ProcArrayGroupMember 的特殊欄位。這會將交易新增至要結束的工作階段清單。此後端程序接著會進入休眠，而其休眠時間會檢測為 ProcArrayGroupUpdate 等待事件。ProcArray with procArrayGroupMember 中的第一個程序稱為領導程序，會以獨佔模式取得 ProcArrayLock。然後，它會清除等待群組 transactionID 清除的程序清單。完成後，領導者會釋出 ProcArrayLock，然後喚醒此清單中的所有程序，通知他們交易已完成。

## 等待時間增加的可能原因
<a name="apg-rpg-ipcprocarraygroup.causes"></a>

執行的程序越多，領導者在排他模式下保留至 procArrayLock 的時間就越長。因此，群組更新案例中的寫入交易越多，導致等待`ProcArrayGroupUpdate`事件的程序可能堆積。在 Database Insights 的最高 SQL 檢視中，您會看到 COMMIT 是具有大部分此等待事件的陳述式。這是預期的，但需要對正在執行的特定寫入 SQL 進行更深入的調查，以決定要採取何種適當動作。

## 動作
<a name="apg-rpg-ipcprocarraygroup.actions"></a>

根據等待事件的原因，我們會建議不同的動作。使用 Amazon RDS Performance Insights 或查詢 PostgreSQL 系統檢視 來識別`IPC:ProcArrayGroupUpdate`事件`pg_stat_activity`。

**Topics**
+ [監控交易遞交和轉返操作](#apg-rpg-ipcprocarraygroup.actions.monitor)
+ [減少並行](#apg-rpg-ipcprocarraygroup.actions.concurrency)
+ [實作連線集區](#apg-rpg-ipcprocarraygroup.actions.pooling)
+ [使用更快的儲存](#apg-rpg-ipcprocarraygroup.actions.storage)

### 監控交易遞交和轉返操作
<a name="apg-rpg-ipcprocarraygroup.actions.monitor"></a>

**監控遞交和轉返** – 遞交和轉返的數量增加可能會導致 ProcArray 的壓力增加。例如，如果 SQL 陳述式因為增加的重複金鑰違規而開始失敗，您可能會看到回復增加，這可能會增加 ProcArray 爭用和資料表膨脹。

Amazon RDS Database Insights 提供 PostgreSQL 指標`xact_rollback`，`xact_commit`並報告每秒遞交和轉返的數量。

### 減少並行
<a name="apg-rpg-ipcprocarraygroup.actions.concurrency"></a>

**批次交易** – 盡可能在單一交易中批次操作，以減少遞交/轉返操作。

**限制並行** – 減少並行作用中交易的數量，以減輕 ProcArray 上的鎖定爭用。雖然它需要一些測試，但減少並行連線的總數可以減少爭用和維護輸送量。

### 實作連線集區
<a name="apg-rpg-ipcprocarraygroup.actions.pooling"></a>

**連線集區解決方案** – 使用連線集區有效率地管理資料庫連線，減少後端總數，進而減少 ProcArray 上的工作負載。雖然它需要一些測試，但減少並行連線的總數可以減少爭用和維護輸送量。

**減少連線風暴** – 同樣地，經常建立和終止連線的模式會對 ProcArray 造成額外的壓力。透過減少此模式，可減少整體爭用。

### 使用更快的儲存
<a name="apg-rpg-ipcprocarraygroup.actions.storage"></a>

**專用日誌磁碟區** – 如果`IPC:ProcArrayGroupUpdate`等待事件伴隨高`IO:WALWrite`等待事件，設定專用日誌磁碟區可減少寫入 WAL 的瓶頸。反之，這可改善遞交的效能。

如需詳細資訊，請參閱[專用日誌磁碟區](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.dlv.html)。