

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

`LWLock:buffer_content` 이벤트는 다른 세션에서 특정 데이터 페이지에 대해 쓰기 잠금을 설정한 동안 세션에서 메모리 내 해당 페이지 읽기 또는 쓰기를 대기 중일 때 발생합니다. RDS for PostgreSQL 13 이상에서는 이 대기 이벤트를 `BufferContent`라고 합니다.

**Topics**
+ [지원되는 엔진 버전](#wait-event.lwlockbuffercontent.context.supported)
+ [컨텍스트](#wait-event.lwlockbuffercontent.context)
+ [대기 증가의 가능한 원인](#wait-event.lwlockbuffercontent.causes)
+ [작업](#wait-event.lwlockbuffercontent.actions)

## 지원되는 엔진 버전
<a name="wait-event.lwlockbuffercontent.context.supported"></a>

이 대기 이벤트 정보는 모든 RDS for PostgreSQL 버전에서 지원됩니다.

## 컨텍스트
<a name="wait-event.lwlockbuffercontent.context"></a>

데이터를 읽거나 조작하기 위해 PostgreSQL 공유 메모리 버퍼를 통해 데이터에 액세스합니다. 버퍼에서 읽기 위해 프로세스는 공유 모드에서 버퍼 콘텐츠에 대한 경량 잠금(LWLock) 을 가져옵니다. 버퍼에 쓰려면 배타적 모드에서 해당 잠금을 가져옵니다. 공유 잠금을 사용하면 다른 프로세스가 동시에 해당 콘텐츠에 대한 공유 잠금을 획득할 수 있습니다. 배타적 잠금은 다른 프로세스에서 모든 유형의 잠금을 얻지 못하게 합니다.

`LWLock:buffer_content`(`BufferContent`) 이벤트는 여러 프로세스가 특정 버퍼의 내용을 잠그려고 시도하고 있음을 나타냅니다.

## 대기 증가의 가능한 원인
<a name="wait-event.lwlockbuffercontent.causes"></a>

`LWLock:buffer_content`(`BufferContent`) 이벤트가 정상보다 많이 나타나 성능 문제를 나타내는 경우 일반적인 원인은 다음과 같습니다.

**동일한 데이터에 대한 동시 업데이트 증가**  
동일한 테이블에 삽입하거나 업데이트하는 쿼리의 동시 세션 수가 증가할 수 있습니다. 이 경합은 인덱스가 많은 테이블에서 더 두드러질 수 있습니다.

**워크로드 데이터가 메모리에 없습니다.**  
활성 워크로드에서 처리 중인 데이터가 메모리에 없으면 이러한 대기 이벤트가 증가할 수 있습니다. 이 효과는 잠금을 유지하는 프로세스가 디스크 I/O 작업을 수행하는 동안 더 오래 유지할 수 있기 때문입니다.

**외래 키 제약 조건을 과도하게 사용**  
외래 키 제약 조건은 프로세스가 버퍼 콘텐츠 잠금에 보관하는 시간을 늘릴 수 있습니다. 이 효과는 해당 키가 업데이트되는 동안 읽기 작업에서 참조된 키에 대해 공유 버퍼 콘텐츠 잠금이 필요하기 때문입니다.

## 작업
<a name="wait-event.lwlockbuffercontent.actions"></a>

대기 이벤트의 원인에 따라 다른 작업을 권장합니다. Amazon RDS 성능 개선 도우미를 사용하거나 `pg_stat_activity` 뷰를 쿼리하여 `LWLock:buffer_content`(`BufferContent`) 이벤트를 식별할 수 있습니다.

**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>

활성 워크로드 데이터가 메모리에 있을 확률을 높이려면 테이블을 분할하거나 인스턴스 클래스를 확장하세요. DB 인스턴스 클래스에 대한 자세한 내용은 [DB 인스턴스 클래스](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>

테이블에서 시퀀스를 사용하는 경우 캐시 크기를 늘려 시퀀스 페이지와 인덱스 페이지에서 경합을 제거합니다. 각 시퀀스는 공유 메모리에서 단일 페이지입니다. 캐시는 연결별로 사전 정의됩니다. 많은 동시 세션에서 시퀀스 값을 받는 경우 이 방법으로는 워크로드를 처리하기에 충분하지 않을 수 있습니다.