

# IO:WALWrite
<a name="wait-event.iowalwrite"></a>



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

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

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

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

미리 쓰기 로그 데이터를 생성하는 데이터베이스의 활동은 먼저 WAL 버퍼를 채운 다음 비동기적으로 디스크에 씁니다. 대기 이벤트 `IO:WALWrite`는 SQL 세션이 트랜잭션의 COMMIT 호출을 해제할 수 있도록 WAL 데이터가 디스크에 쓰기를 완료하기를 기다리고 있을 때 생성됩니다.

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

이 대기 이벤트가 자주 발생하는 경우 워크로드와 워크로드가 수행하는 업데이트 유형 및 빈도를 검토해야 합니다. 특히 다음 활동 유형을 찾습니다.

**과중한 DML 활동**  
데이터베이스 테이블의 데이터는 즉시 변경되지 않습니다. 한 테이블에 대한 삽입은 다른 클라이언트가 동일한 테이블을 삽입하거나 업데이트할 때까지 기다려야 할 수 있습니다. 데이터 값 변경(INSERT, UPDATE, DELETE, COMMIT, ROLLBACK TRANSACTION)을 위한 데이터 조작 언어(DML) 문으로 인해 경합이 발생하여 미리 쓰기 로그 파일이 버퍼가 플러시되기를 기다리고 있을 수 있습니다. 이 상황은 과중한 DML 활동을 나타내는 다음과 같은 Amazon RDS 성능 개선 도우미 지표에 캡처됩니다.  
+  `tup_inserted`
+ `tup_updated`
+ `tup_deleted`
+ `xact_rollback`
+ `xact_commit`
이러한 지표에 대한 자세한 내용은 [Amazon RDS for PostgreSQL용 성능 개선 도우미 카운터](USER_PerfInsights_Counters.md#USER_PerfInsights_Counters.PostgreSQL) 섹션을 참조하세요.

**잦은 체크포인트 활동**  
체크포인트가 자주 실행되면 WAL 파일의 수가 늘어납니다. RDS for PostgreSQL에서는 전체 페이지 쓰기가 항상 ‘켜져’ 있습니다. 전체 페이지 쓰기는 데이터 손실을 방지하는 데 도움이 됩니다. 하지만 체크포인트가 너무 자주 발생하면 시스템에 전반적인 성능 문제가 발생할 수 있습니다. DML 활동이 많은 시스템에서는 특히 그렇습니다. 경우에 따라 ‘체크포인트가 너무 자주 발생합니다’라는 오류 메시지가 `postgresql.log`에 표시될 수 있습니다.  
체크포인트를 조정할 때는 비정상 종료 시 복구에 필요한 예상 시간에 맞춰 성능을 신중하게 조정하는 것이 좋습니다.

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

이 대기 이벤트 수를 줄이려면 다음 작업을 수행하는 것이 좋습니다.

**Topics**
+ [커밋 수 저감](#wait-event.iowalwrite.actions.problem)
+ [체크포인트 모니터링](#wait-event.iowalwrite.actions.monitor)
+ [스케일 업 IO](#wait-event.iowalwrite.actions.scale-io)
+ [전용 로그 볼륨(DLV)](#wait-event.iowalwrite.actions.dlv)

### 커밋 수 저감
<a name="wait-event.iowalwrite.actions.problem"></a>

커밋 수를 줄이려면 명령문을 트랜잭션 블록으로 결합하면 됩니다. Amazon RDS 성능 개선 도우미를 사용하여 실행 중인 쿼리 유형을 검사합니다. 대규모 유지 관리 작업을 사용량이 적은 시간대로 옮길 수도 있습니다. 예를 들어 프로덕션 외 시간에 인덱스를 생성하거나 `pg_repack` 작업을 사용할 수 있습니다.

### 체크포인트 모니터링
<a name="wait-event.iowalwrite.actions.monitor"></a>

RDS for PostgreSQL DB 인스턴스가 체크포인트용 WAL 파일에 얼마나 자주 쓰는지 확인하기 위해 모니터링할 수 있는 두 가지 파라미터가 있습니다.
+ `log_checkpoints` - 이 파라미터는 기본적으로 ‘on’으로 설정되어 있습니다. 그러면 메시지가 각 체크포인트의 PostgreSQL 로그로 전송됩니다. 이러한 로그 메시지에는 기록된 버퍼 수, 쓰기 소요 시간 및 지정된 체크포인트에 대해 추가, 제거 또는 재활용된 WAL 파일 수가 포함됩니다.

  이 파라미터에 대한 자세한 내용은 PostgreSQL 설명서의 [오류 보고 및 로깅](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-CHECKPOINTS)을 참조하세요.
+ `checkpoint_warning` - 이 파라미터는 초과할 경우 경고가 생성되는 체크포인트 빈도의 임계값(초)을 설정합니다. 기본적으로 이 파라미터는 RDS for PostgreSQL에서 설정되지 않습니다. 이 파라미터의 값을 설정하여 RDS for PostgreSQL DB 인스턴스의 데이터베이스 변경 사항이 WAL 파일이 처리할 크기가 아닌 속도로 작성될 때 경고를 받도록 할 수 있습니다. 예를 들어 이 파라미터를 30으로 설정한다고 가정해 보겠습니다. RDS for PostgreSQL 인스턴스가 30초 빈도보다 더 자주 변경 사항을 작성해야 하는 경우 "체크포인트가 너무 자주 발생합니다"라는 경고가 PostgreSQL 로그로 전송됩니다. 이는 `max_wal_size` 값을 늘려야 함을 나타낼 수 있습니다.

  자세한 내용은 PostgreSQL 설명서에서 [Write Ahead Log](https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-CHECKPOINTS)를 참조하세요.

### 스케일 업 IO
<a name="wait-event.iowalwrite.actions.scale-io"></a>

이 입출력(IO) 대기 이벤트 유형은 더 빠른 IO를 제공하도록 초당 입출력 작업 처리량(IOPS)을 조정하여 해결할 수 있습니다. CPU를 확장하는 것보다 IO를 확장하는 것이 좋습니다. 늘어난 CPU는 더 많은 작업을 처리할 수 있고 따라서 IO 병목 현상이 더욱 악화될 수 있으므로 CPU를 확장하면 I/O 경합이 더 심해질 수 있기 때문입니다. 일반적으로 크기 조정 작업을 수행하기 전에 워크로드 조정을 고려하는 것이 좋습니다.

### 전용 로그 볼륨(DLV)
<a name="wait-event.iowalwrite.actions.dlv"></a>

Amazon RDS 콘솔, AWS CLI 또는 Amazon RDS API를 사용하여 프로비저닝된 IOPS(PIOPS) 스토리지를 사용하는 DB 인스턴스 전용 로그 볼륨(DLV)을 사용할 수 있습니다. DLV는 데이터베이스 테이블이 들어 있는 볼륨과 분리된 스토리지 볼륨으로 PostgreSQL 데이터베이스 트랜잭션 로그를 옮깁니다. 자세한 내용은 [전용 로그 볼륨(DLV)](CHAP_Storage.md#CHAP_Storage.dlv) 단원을 참조하십시오.