本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
IPC:ProcArrayGroupUpdate
當工作階段正在等待群組領導者在該操作結束時更新交易狀態時,就會IPC:ProcArrayGroupUpdate發生事件。雖然 PostgreSQL 通常會將 IPC 類型等待事件與平行查詢操作建立關聯,但此特定等待事件並非平行查詢特有的。
支援的引擎版本
所有 RDS for PostgreSQL 的版本都支援此等待事件資訊。
Context
了解程序陣列 – 程序 (proc) 陣列是 PostgreSQL 中的共用記憶體結構。它保留所有執行中程序的相關資訊,包括交易詳細資訊。在交易完成期間 (COMMIT 或 ROLLBACK),需要更新 ProcArray,以反映變更並從陣列清除 transactionID。嘗試完成其交易的工作階段必須在 ProcArray 上取得專屬鎖定。這可防止其他程序取得共用或獨佔鎖定。
群組更新機制 – 執行 COMMIT 或 ROLLBACK 時,如果後端程序無法在獨佔模式中取得 ProcArrayLock,則會更新稱為 ProcArrayGroupMember 的特殊欄位。這會將交易新增至要結束的工作階段清單。此後端程序接著會進入休眠,而其休眠時間會檢測為 ProcArrayGroupUpdate 等待事件。ProcArray with procArrayGroupMember 中的第一個程序稱為領導程序,會以獨佔模式取得 ProcArrayLock。然後,它會清除等待群組 transactionID 清除的程序清單。完成後,領導者會釋出 ProcArrayLock,然後喚醒此清單中的所有程序,通知他們交易已完成。
等待時間增加的可能原因
執行的程序越多,領導者在排他模式下保留至 procArrayLock 的時間就越長。因此,群組更新案例中的寫入交易越多,導致等待ProcArrayGroupUpdate事件的程序可能堆積。在 Database Insights 的最高 SQL 檢視中,您會看到 COMMIT 是具有大部分此等待事件的陳述式。這是預期的,但需要對正在執行的特定寫入 SQL 進行更深入的調查,以決定要採取何種適當動作。
動作
根據等待事件的原因,我們會建議不同的動作。使用 Amazon RDS Performance Insights 或查詢 PostgreSQL 系統檢視 來識別IPC:ProcArrayGroupUpdate事件pg_stat_activity。
監控交易遞交和轉返操作
監控遞交和轉返 – 遞交和轉返的數量增加可能會導致 ProcArray 的壓力增加。例如,如果 SQL 陳述式因為增加的重複金鑰違規而開始失敗,您可能會看到回復增加,這可能會增加 ProcArray 爭用和資料表膨脹。
Amazon RDS Database Insights 提供 PostgreSQL 指標xact_rollback,xact_commit並報告每秒遞交和轉返的數量。
減少並行
批次交易 – 盡可能在單一交易中批次操作,以減少遞交/轉返操作。
限制並行 – 減少並行作用中交易的數量,以減輕 ProcArray 上的鎖定爭用。雖然它需要一些測試,但減少並行連線的總數可以減少爭用和維護輸送量。
實作連線集區
連線集區解決方案 – 使用連線集區有效率地管理資料庫連線,減少後端總數,進而減少 ProcArray 上的工作負載。雖然它需要一些測試,但減少並行連線的總數可以減少爭用和維護輸送量。
減少連線風暴 – 同樣地,經常建立和終止連線的模式會對 ProcArray 造成額外的壓力。透過減少此模式,可減少整體爭用。
使用更快的儲存
專用日誌磁碟區 – 如果IPC:ProcArrayGroupUpdate等待事件伴隨高IO:WALWrite等待事件,設定專用日誌磁碟區可減少寫入 WAL 的瓶頸。反之,這可改善遞交的效能。
如需詳細資訊,請參閱專用日誌磁碟區。