本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
IO:WALWrite
支援的引擎版本
所有 RDS for PostgreSQL 第 10 版和更新版本都支援此等待事件資訊。
Context
資料庫中產生預寫日誌資料的資料庫中的活動會先填滿 WAL 緩衝區,然後以非同步方式寫入至磁碟。等待事件 IO:WALWrite
是在 SQL 工作階段正在等待 WAL 資料,以完成寫入至磁碟時產生的,以便它可以釋出交易的 COMMIT 呼叫。
等待時間增加的可能原因
如果此等待事件經常發生,您應該檢閱工作負載,以及工作負載執行的更新類型及其頻率。尤其,尋找下列類型的活動。
- 繁重的 DML 活動
-
變更資料庫資料表中的資料不會立即發生。插入至一個資料表可能需要等待另一個用戶端的相同資料表插入或更新。用於變更資料值的資料處理語言 (DML) 陳述式 (INSERT、UPDATE、DELETE、COMMIT、ROLLBACK TRANSACTION) 可能會產生爭用,因而造成預寫日誌檔等待緩衝區排清。此情況是在下列指出繁重 DML 活動的 Amazon RDS Performance Insights 指標中擷取的。
tup_inserted
tup_updated
tup_deleted
xact_rollback
xact_commit
如需這些指標的詳細資訊,請參閱 Amazon RDS 的 Performance Insights 計數器 SQL。
- 頻繁的檢查點活動
-
頻繁的檢查點造就更大的 WAL 大小。在 RDS for PostgreSQL 中,整頁寫入一律「開啟」。整頁寫入有助於防範資料遺失。不過,當檢查點發生過於頻繁時,系統可能會遭受整體效能問題。在 DML 活動繁重的系統上尤其如此。在某些情況下,您可能會在
postgresql.log
發現錯誤訊息,說明「檢查點發生過於頻繁」。建議您在調整檢查點時,仔細平衡效能與異常關機時需要復原的預期時間。
動作
建議採取下列動作來減少此等待事件的數目。
減少遞交次數
若要減少遞交次數,您可以將陳述式合併成交易區塊。使用 Amazon RDS Performance Insights 來檢查正在執行的查詢類型。您也可以將大型維護操作移至離峰時段。例如,建立索引或在非生產時段使用 pg_repack
操作。
監控檢查點
有兩個您可以監控的參數,以查看 RDS for PostgreSQL 資料庫執行個體寫入至 WAL 檔案以取得檢查點的頻率。
log_checkpoints
– 此參數預設為「開啟」。它會導致訊息傳送至每個檢查點的 PostgreSQL 日誌。這些日誌訊息包含寫入的緩衝區數目、寫入它們所花費的時間,以及針對指定檢查點新增,刪除或回收的 WAL 檔案數目。如需此參數的詳細資訊,請參閱 PostgreSQL 文件中的錯誤報告和記錄
。 checkpoint_warning
– 此參數設定檢查點頻率的閾值 (以秒為單位),若超過此值,就會產生警告。根據預設,此參數不會在 RDS for PostgreSQL 中設定。您可以設定此參數的值,在 RDS for PostgreSQL 資料庫執行個體中的資料庫變更以 WAL 檔案未調整為可處理大小的速率寫入時收到警告。例如,假設您將此參數設為 30。如果您的 RDS for PostgreSQL 執行個體需要寫入變更的頻率超過每 30 秒一次,則「檢查點發生過於頻繁」的警告會傳送至 PostgreSQL 日誌。這可能指出您的max_wal_size
值應該增加。如需的詳細資訊,請參閱 PostgreSQL 文件中的預寫日誌
。
擴增 IO
此類型的輸入/輸出 (IO) 等待事件可透過擴展每秒讀寫次數 (IOPS) 來修補,以提供更快的 IO。擴展 IO 優於擴展 CPU,因為擴展 CPU 可能會導致更多的 IO 爭用,因為增加的 CPU 可以處理更多的工作,從而使 IO 瓶頸更糟。一般而言,在執行擴展操作之前,建議您考慮調整工作負載。
專用記錄檔磁碟區 (DLV)
您可以使用 Amazon RDS 主控台、 AWS CLI或 Amazon RDS API,將專用日誌磁碟區 (DLV) 用於使用佈建 IOPS (PIOPS) 儲存體的資料庫執行個體。DLV 會將 PostgreSQL 資料庫交易記錄移至與包含資料庫表格的磁碟區不同的儲存磁碟區。如需更多詳細資訊,請參閱 專用日誌磁碟區 (DLV)。