LWLock:MultiXact - Amazon Aurora

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

LWLock:MultiXact

LWLock:MultiXactMemberBufferLWLock:MultiXactOffsetBufferLWLock:MultiXactMemberSLRU、和 LWLock:MultiXactOffsetSLRU wait 事件表示工作階段正在等待擷取修改指定資料表中相同資料列的交易清單。

  • LWLock:MultiXactMemberBuffer— 處理作業正在等待多重處理作業成員的最近最少使用 (SLRU) 緩衝區上的 I/O。

  • LWLock:MultiXactMemberSLRU— 處理程序正在等待存取多重執行緒成員的最近最少使用的簡單 (SLRU) 快取。

  • LWLock:MultiXactOffsetBuffer— 處理序正在等待一個簡單最近最少使用的 (SLRU) 緩衝區上的 I/O,以進行多重動作偏移。

  • LWLock:MultiXactOffsetSLRU— 處理序正在等待存取最近最少使用的簡單 (SLRU) 快取,以取得多重動作偏移量。

支援的引擎版本

所有版本的 Aurora Postgre SQL 都支援此等待事件資訊。

Context

一個 multixact 是一種數據結構,用於存儲修改同一個表行的事務IDs(XIDs)的列表。當單一交易參考資料表中的資料列時,交易 ID 會儲存在資料表標頭資料列中。當多個交易參考資料表中的相同資料列時,交易清單會儲存IDs在多重交易資料結構中。multixact 等待事件表示工作階段正在從資料結構中擷取參照資料表中指定資料列的交易清單。

等待時間增加的可能原因

多重使用的三個常見原因如下:

  • 來自明確儲存點的子交易 — 在交易中明確建立儲存點會為同一資料列產生新的交易。例如,依序使用 SELECT FOR UPDATESAVEPOINTUPDATE

    一些驅動程序,對象關係映射器(ORMs)和抽象層具有配置選項,用於使用保存點自動包裝所有操作。這可能會在某些工作負載中產生許多 multixact 等待事件。後SQLJDBC驅動程序的autosave選項就是這樣的一個例子。如需詳細資訊,請參閱 Postgre SQL JDBC 文件JDBC中的 pg。另一個例子是 Postgre SQL ODBC 驅動程序及其protocol選項。如需詳細資訊,請參閱 Postgre SQL ODBC 驅動程式文件中的 psql ODBC 組態選項

  • PL/PG 子SQLEXCEPTION句的子交易 — 您在 PL/PG SQL 函數或程序中撰寫的每個子EXCEPTION句都會在內部建立。SAVEPOINT

  • 外部索引鍵 – 多個交易在上層記錄上取得共用鎖定。

當指定的資料列包含在多重異動作業中時,處理資料列需要IDs從multixact清單擷取交易。如果查詢無法從記憶體快取中取得 multixact,則必須從 Aurora 儲存層讀取資料結構。這個來自儲存區的 I/O 表示SQL查詢可能需要更長的時間。由於大量的多重交易,記憶體快取遺漏可能會在大量使用情況下開始發生。所有這些因素都會導致此等待事件的增加。

動作

根據等待事件的原因,我們會建議不同的動作。其中一些操作可以幫助立即減少等待事件。但是,其他人可能需要調查和更正來擴展您的工作負載。

使用此等待事件在表格上執行真空凍結

如果此等待事件突然峰值並影響您的生產環境,您可以使用下列任何一種暫時方法來減少其計數。

  • VACUUMFREEZE在受影響的資料表或資料表分割區上使用,立即解決問題。如需詳細資訊,請參閱VACUUM

  • 使用VACUUM(FREEZE,INDEX_ CLEANUPFALSE)子句通過跳過索引執行快速真空。如需詳細資訊,請參閱儘快將表格吸塵

使用此等待事件增加桌子上的自動真空頻率

掃描所有數據庫中的所有表後,最終VACUUM將刪除多重運行,並且它們最舊的多重運行值是高級的。如需詳細資訊,請參閱多重作業與環繞。若要將LWLock:MultiXact wait 事件保持在最低限度,您必須視需VACUUM要經常執行。若要這麼做,請確定您的 Aurora Postgre SQL 資料庫叢集VACUUM中的設定為最佳狀態。

如果在受影響的資料表或資料表分割區VACUUMFREEZE上使用可解決等待事件問題,建議您使用排程器 (例如) 執行pg_cron,VACUUM而不是在執行個體層級調整 autovacuum。

為了使自動真空更頻繁地發生,您可以減少受影響表autovacuum_multixact_freeze_max_age中存儲參數的值。如需詳細資訊,請參閱自動吸塵器 _ 凍結 _ 最大值。

增加記憶體參數

您可以在叢集層級設定下列參數,讓叢集中的所有執行個體保持一致。這有助於減少工作負載中的等待事件。我們建議您不要將這些值設定得太高,以致記憶體不足。

  • multixact_offsets_cache_size

  • multixact_members_cache_size至二六五

您必須重新啟動執行個體,參數變更才會生效。透過這些參數,您可以使用更多執行個體,在溢出RAM到磁碟之前將多重運算結構儲存在記憶體中。

減少長期執行的交易

長時間執行的交易會導致真空保留其資訊,直到認可交易或唯讀交易關閉為止。建議您主動監控和管理長時間執行的交易。如需詳細資訊,請參閱資料庫在交易連線中長時間閒置。嘗試修改您的應用程式,以避免或減少使用長時間執行的交易。

長期行動

檢查您的工作負載,以探索多工溢出的原因。您必須修正此問題,才能擴展工作負載並減少等待事件。

  • 您必須分析用來建立資料表的 DDL (資料定義語言)。請確定資料表結構和索引設計良好。

  • 當受影響的資料表具有外部索引鍵時,請判斷是否需要它們,或是否有其他方法可以強制執行參照完整性。

  • 當資料表具有大量未使用的索引時,可能會導致 autovacuum 不符合您的工作負載,並可能阻止其執行。為了避免這種情況,請檢查未使用的索引並完全刪除它們。如需詳細資訊,請參閱使用大型索引管理自動真空

  • 減少在交易中使用儲存點。