

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

# LWLock:buffer\$1content (BufferContent)
<a name="wait-event.lwlockbuffercontent"></a>

`LWLock:buffer_content` 事件表示工作階段正等待在記憶體中讀取或寫入資料分頁，但另一個工作階段已鎖定該分頁來寫入。在 RDS for PostgreSQL 13 及更新版本中，此等待事件稱為 `BufferContent`。

**Topics**
+ [支援的引擎版本](#wait-event.lwlockbuffercontent.context.supported)
+ [Context](#wait-event.lwlockbuffercontent.context)
+ [等待變多的可能原因](#wait-event.lwlockbuffercontent.causes)
+ [動作](#wait-event.lwlockbuffercontent.actions)

## 支援的引擎版本
<a name="wait-event.lwlockbuffercontent.context.supported"></a>

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

## Context
<a name="wait-event.lwlockbuffercontent.context"></a>

為了讀取或操作資料，PostgreSQL 透過共用記憶體緩衝區來存取資料。為了讀取緩衝區，程序以共用模式在緩衝區內容上取得輕量級鎖定 (LWLock)。為了寫入緩衝區，程序以獨佔模式取得該鎖定。共用鎖定允許其他程序同時在該內容上取得共用鎖定。獨佔鎖定阻止其他程序在該內容上得得任何類型的鎖定。

`LWLock:buffer_content` (`BufferContent`) 事件表示多個程序正嘗試在特定緩衝區的內容上取得鎖定。

## 等待變多的可能原因
<a name="wait-event.lwlockbuffercontent.causes"></a>

`LWLock:buffer_content` (`BufferContent`) 事件比平時更常出現時，可能表示有效能問題，典型原因包括：

**更常並行更新相同資料**  
以查詢來更新相同緩衝區內容的並行工作階段可能變多。在有大量索引的資料表上，這種爭用可能更明顯。

**工作負載資料不在記憶體中**  
當作用中工作負載處理的資料不在記憶體中時，這些等待事件可能增加。這是因為程序在執行磁碟輸入/輸出操作時持有鎖定更久。

**過度使用外部索引鍵限制**  
外部索引鍵限制會延長程序持有緩衝區內容鎖定的時間。這是因為讀取操作在更新參考的索引鍵時，在該索引鍵上需要共用緩衝區內容鎖定。

## 動作
<a name="wait-event.lwlockbuffercontent.actions"></a>

根據等待事件的原因，我們會建議不同的動作。您可以使用 Amazon RDS 績效詳情或查詢 `LWLock:buffer_content` 檢視表來識別 `BufferContent` (`pg_stat_activity`) 事件。

**Topics**
+ [改善記憶體內效率](#wait-event.lwlockbuffercontent.actions.in-memory)
+ [減少使用外部索引鍵限制](#wait-event.lwlockbuffercontent.actions.foreignkey)
+ [移除未使用的索引](#wait-event.lwlockbuffercontent.actions.indexes)
+ [使用序列時增加快取大小](#wait-event.lwlockbuffercontent.actions.sequences)

### 改善記憶體內效率
<a name="wait-event.lwlockbuffercontent.actions.in-memory"></a>

若要讓作用中工作負載資料更有機會留在記憶體中，請分割資料表或擴充執行個體類別的規模。如需資料庫執行個體類別的相關資訊，請參閱 [ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

### 減少使用外部索引鍵限制
<a name="wait-event.lwlockbuffercontent.actions.foreignkey"></a>

調查遇到大量 `LWLock:buffer_content` (`BufferContent`）等待事件的工作負載如何使用外部引索鍵限制。刪除不必要的外部索引鍵限制。

### 移除未使用的索引
<a name="wait-event.lwlockbuffercontent.actions.indexes"></a>

對於遇到大量 `LWLock:buffer_content` (`BufferContent`) 等待事件的工作負載，請識別未使用的索引並移除。

### 使用序列時增加快取大小
<a name="wait-event.lwlockbuffercontent.actions.sequences"></a>

如果您的資料表使用序列，請增加快取大小，以移除序列頁面和索引頁面上的爭用。每個序列都是共用記憶體中的單一頁面。預先定義的快取根據每個連線。當許多並行工作階段取得序列值時，此快取可能不足以處理工作負載。