本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
LWLock:BufferMapping (LWLock:buffer_mapping)
此事件表示工作階段正在等待將資料區塊與共用緩衝集區中的緩衝區建立關聯。
注意
對於 RDS for PostgreSQL 第 13 版及更新版本,此事件命名為 LWLock:BufferMapping
。對於 RDS for PostgreSQL 第 12 版及更舊版本,此事件命名為 LWLock:buffer_mapping
。
支援的引擎版本
此等待事件資訊與 RDS for PostgreSQL 9.6 版及更新版本有關。
Context
共用緩衝集區是一種 PostgreSQL 記憶體區域,其中保留程序正在使用或已使用的所有分頁。程序需要分頁時會將分頁讀入共用緩衝集區。shared_buffers
參數設定共用緩衝區大小,並保留記憶體區域來存放資料表和索引分頁。如果您變更此參數,請務必重新啟動資料庫。
下列情況會發生 LWLock:buffer_mapping
等待事件:
-
程序在緩衝區資料表中搜尋分頁,並取得共用緩衝區映射鎖定。
-
程序將分頁載入緩衝集區,並取得獨佔緩衝區映射鎖定。
-
程序從集區移除頁面,並取得獨佔緩衝區映射鎖定。
原因
此事件比平時更常出現時,可能表示有效能問題,資料庫正在共用緩衝集區中頁進頁出。典型原因包括:
-
大型查詢
-
膨脹的索引和資料表
-
完整資料表掃描
-
小於工作集的共用集區大小
動作
根據等待事件的原因,我們會建議不同的動作。
監控緩衝區相關指標
LWLock:buffer_mapping
等待激增時,請調查緩衝區命中率。您可以使用這些指標,以更加了解緩衝區快取中的情況。檢查下列指標:
blks_hit
-
此績效詳情計數器指標指出從共用緩衝集區擷取的區塊數目。在
LWLock:buffer_mapping
等待事件出現之後,您可能發現blks_hit
激增。 blks_read
-
此績效詳情計數器指標指出需要將輸入/輸出讀入共用緩衝集區的區塊數目。在
LWLock:buffer_mapping
等待事件發生之前,您可能發現blks_read
激增。
評估索引策略
若要確認索引策略不會降低效能,請檢查下列各項:
- 索引膨脹
-
請確定索引和資料表膨脹不會導致將不必要的分頁讀入共用緩衝區。如果資料表包含未使用的資料列,請考慮封存資料並從資料表中移除資料列。然後,您可以對已調整大小的資料表重建索引。
- 常用查詢的索引
-
若要判斷您是否有最佳索引,請在績效詳情中監控資料庫引擎指標。
tup_returned
指標顯示讀取的資料列數。tup_fetched
指標顯示傳回給用戶端的資料列數。如果tup_returned
明顯大於tup_fetched
,表示資料可能未正確編製索引。此外,資料表統計數字可能不是最新。
減少必須快速配置的緩衝區數目
若要減少 LWLock:buffer_mapping
等待事件,請嘗試減少必須快速配置的緩衝區數目。有一種策略是執行較小的批次操作。您可以分割資料表來獲得較小的批次。