

# Aurora PostgreSQL의 로컬 쓰기 전달
<a name="aurora-postgresql-write-forwarding"></a>

 *로컬(클러스터 내) 쓰기 전달*을 사용하면 애플리케이션이 Aurora 복제본에서 직접 읽기/쓰기 트랜잭션을 발행할 수 있도록 합니다. 그런 다음 쓰기 명령이 커밋될 라이터 DB 인스턴스로 전달됩니다. 가끔 쓰기가 발생하고 한 트랜잭션에서 최신 쓰기를 읽는 기능인 *쓰기 후 읽기 일관성*이 필요한 애플리케이션에 로컬 쓰기 전달을 사용할 수 있습니다.

 쓰기 전달을 사용하지 않으면 애플리케이션이 트래픽을 적절한 엔드포인트로 전송하기 위해 두 세트의 데이터베이스 연결을 유지하면서 모든 읽기 및 쓰기 트래픽을 완전히 분할해야 합니다. 읽기 전용 복제본은 라이터 인스턴스로부터 비동기식으로 업데이트를 받습니다. 또한 복제 지연은 읽기 전용 복제본마다 다를 수 있으므로 모든 복제본에서 전역 읽기 일관성을 달성하는 것은 어렵습니다. 라이터 데이터베이스 인스턴스에서 읽기 후 쓰기 일관성이 필요한 모든 읽기를 처리해야 합니다. 또는 일관성을 보장하면서 확장성을 위해 여러 읽기 전용 복제본을 활용하려면 복잡한 사용자 지정 애플리케이션 로직을 개발해야 합니다.

 쓰기 전달을 사용하면 이러한 트랜잭션을 분할하거나 라이터 인스턴스로만 전송할 필요가 없습니다. 또한 *읽기 후 쓰기 일관성* 일관성을 달성하기 위해 복잡한 애플리케이션 로직을 개발할 필요가 없습니다.

 로컬 쓰기 전달은 Aurora PostgreSQL을 사용할 수 있는 모든 리전에서 사용할 수 있습니다. 다음과 같은 Aurora PostgreSQL 버전이 지원됩니다.
+ 16.4 이상의 16 버전
+ 15.8 이상의 15 버전
+ 14.13 이상의 14 버전

 로컬 쓰기 전달은 리전 내 복제본의 쓰기를 전달하는 데 사용됩니다. 글로벌 복제본의 쓰기를 전달하려면 [Amazon Aurora 글로벌 데이터베이스에서 쓰기 전달 사용](aurora-global-database-write-forwarding.md) 섹션을 참조하세요.

**Topics**
+ [Aurora PostgreSQL의 로컬 쓰기 전달 제한 사항 및 고려 사항](aurora-postgresql-write-forwarding-limitations.md)
+ [로컬 쓰기 전달을 위한 Aurora PostgreSQL 구성](aurora-postgresql-write-forwarding-configuring.md)
+ [Aurora PostgreSQL에 대한 로컬 쓰기 전달 작업](aurora-postgresql-write-forwarding-understanding.md)
+ [Aurora PostgreSQL에서 로컬 쓰기 전달 모니터링](aurora-postgresql-write-forwarding-monitoring.md)

# Aurora PostgreSQL의 로컬 쓰기 전달 제한 사항 및 고려 사항
<a name="aurora-postgresql-write-forwarding-limitations"></a>

 현재 Aurora PostgreSQL의 로컬 쓰기 전달에는 다음과 같은 제한 사항이 적용됩니다.
+  RDS 프록시에서는 로컬 쓰기 전달이 지원되지 않습니다.
+  특정 명령문은 쓰기 전달과 함께 Aurora PostgreSQL에서 사용할 때 허용되지 않거나 부실 결과를 생성할 수 있습니다. 또한 사용자 정의 함수 및 사용자 정의 프로시저는 지원되지 않습니다. 따라서 `EnableLocalWriteForwarding` 설정은 DB 클러스터에 대해 기본적으로 꺼져 있습니다. 이 설정을 켜기 전에, 애플리케이션 코드가 이러한 제한 사항의 영향을 받지 않는지 확인하십시오.
+  다음과 같은 종류의 SQL 문은 쓰기 전달에서 지원되지 않습니다.
**참고**  
이러한 문은 애플리케이션에서 암시적으로 사용하거나 PostgreSQL 프로토콜로 추론할 수 있습니다. 예를 들어 PL/SQL 예외 처리 시 지원되는 문이 아닌 SAVEPOINT를 사용할 수 있습니다.
  +  `ANALYZE` 
  +  `CLUSTER` 
  +  `COPY` 
  + 커서 - 커서는 지원되지 않으므로 로컬 쓰기 전달을 사용하기 전에 커서를 닫아야 합니다.
  +  데이터 정의 언어(DDL) 문 
  +  `GRANT`\$1`REVOKE`\$1`REASSIGN OWNED`\$1`SECURITY LABEL`
  +  `LISTEN / NOTIFY` 
  +  `LOCK` 
  +  `SAVEPOINT` 
  +  `SELECT INTO` 
  +  `SET CONSTRAINTS` 
  +  시퀀스 업데이트: `nextval()`, `setval()` 
  +  `TRUNCATE` 
  +  2단계 커밋 명령: `PREPARE TRANSACTION`, `COMMIT PREPARED`, `ROLLBACK PREPARED` 
  + 사용자 정의 함수 및 사용자 정의 절차.
  +  `VACUUM` 

 다음과 같은 SQL 문을 쓰기 전달과 함께 사용할 수 있습니다.
+ DML 명령문은 `INSERT ... SELECT` 명령문 또는 `DELETE ... WHERE` 명령문과 같이 여러 부분으로 구성될 수 있습니다. 이 경우 전체 명령문이 라이터 DB 인스턴스로 전달되어 그 위치에서 실행됩니다.
+ `INSERT`, `DELETE` 및 `UPDATE`와 같은 데이터 조작 언어(DML) 문입니다.
+  이 목록에 있는 문이 포함된 `EXPLAIN` 문
+  `PREPARE` 및 `EXECUTE` 문입니다.
+  `SELECT FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE }` 문.

# 로컬 쓰기 전달을 위한 Aurora PostgreSQL 구성
<a name="aurora-postgresql-write-forwarding-configuring"></a>

 다음 섹션을 사용하여 Amazon Aurora PostgreSQL DB 클러스터에 대한 로컬 쓰기 전달을 활성화하고, 일관성 수준을 구성하며, 쓰기 전달을 사용하여 트랜잭션을 관리할 수 있습니다.

## 로컬 쓰기 전달 활성화
<a name="aurora-postgresql-write-forwarding-enabling"></a>

 기본적으로 Aurora PostgreSQL DB 클러스터에는 로컬 쓰기 전달이 활성화되어 있지 않습니다. 인스턴스 수준이 아닌 클러스터 수준에서 직접 로컬 쓰기 전달을 활성화합니다.

### 콘솔
<a name="aurora-postgresql-write-forwarding-enabling.CON"></a>

 DB 클러스터를 만들거나 수정할 때 AWS Management Console을 사용하여 **읽기 전용 복제본 쓰기 전달** 아래의 **로컬 쓰기 전달 켜기** 확인란을 선택합니다.

### AWS CLI
<a name="aurora-postgresql-write-forwarding-enabling.CLI"></a>

 AWS CLI를 사용하여 로컬 쓰기 전달을 활성화하려면 `--enable-local-write-forwarding` 옵션을 사용합니다. 이 옵션은 `create-db-cluster` 명령을 사용하여 새 DB 클러스터를 생성할 때 작동합니다. `modify-db-cluster` 명령을 사용하여 기존 DB 클러스터를 수정할 때도 작동합니다. 이러한 동일한 CLI 명령과 함께 `--no-enable-local-write-forwarding` 옵션을 사용하여 로컬 쓰기 전달을 비활성화할 수 있습니다.

 다음 예시에서는 로컬 쓰기 전달이 활성화된 Aurora PostgreSQL DB 클러스터를 생성합니다.

```
                        aws rds create-db-cluster \
                        --db-cluster-identifier write-forwarding-test-cluster \
                        --enable-local-write-forwarding \
                        --engine aurora-postgresql \
                        --engine-version 16.4 \
                        --master-username myuser \
                        --master-user-password mypassword \
                        --backup-retention 1
```

 그런 다음 쓰기 전달을 사용할 수 있도록 라이터 및 리더 DB 인스턴스를 생성합니다. 자세한 내용은 [Amazon Aurora DB 클러스터 생성](Aurora.CreateInstance.md) 단원을 참조하십시오.

### RDS API
<a name="aurora-postgresql-write-forwarding-enabling.API"></a>

 Amazon RDS API를 사용하여 로컬 쓰기 전달을 활성화하려면 `EnableLocalWriteForwarding` 파라미터를 `true`로 설정합니다. 이 파라미터는 `CreateDBCluster` 작업을 사용하여 새 DB 클러스터를 생성할 때 작동합니다. `ModifyDBCluster` 작업을 사용하여 기존 DB 클러스터를 수정할 때도 작동합니다. `EnableLocalWriteForwarding` 파라미터를 `false`로 설정하여 로컬 쓰기 전달을 비활성화할 수 있습니다.

### 데이터베이스 세션에 대한 로컬 쓰기 전달 활성화
<a name="aurora-postgresql-write-forwarding-enabling-session"></a>

 `apg_write_forward.consistency_mode` 파라미터는 쓰기 전달을 가능하게 하는 DB 파라미터 및 DB 클러스터 파라미터입니다. 읽기 일관성 수준에 대해 `SESSION`, `EVENTUAL`, `GLOBAL` 또는 `OFF`를 지정할 수 있습니다. 일관성 수준에 대한 자세한 내용은 [Aurora PostgreSQL에서 로컬 쓰기 전달의 일관성 및 격리](#aurora-postgresql-write-forwarding-isolation) 단원을 참조하세요.

 이 파라미터에는 다음과 같은 규칙이 적용됩니다.
+ 기본값은 `SESSION`입니다.
+  `apg_write_forward.consistency_mode`를 `EVENTUAL`, `SESSION` 또는 `GLOBAL`로 설정하는 경우에만 로컬 쓰기 전달을 사용할 수 있습니다. 이 파라미터는 로컬 쓰기 전달이 활성화되어 있는 DB 클러스터의 리더 인스턴스에만 적용됩니다.
+ 값을 `OFF`로 설정하면 세션에서 로컬 쓰기 전달이 비활성화됩니다.

## Aurora PostgreSQL에서 로컬 쓰기 전달의 일관성 및 격리
<a name="aurora-postgresql-write-forwarding-isolation"></a>

읽기 전용 복제본에서 읽기 일관성 정도를 제어할 수 있습니다. 읽기 일관성 수준을 조정하여 세션에서 전달된 모든 쓰기 작업이 후속 쿼리 전에 읽기 전용 복제본에 표시되도록 할 수 있습니다. 또한 이 설정을 사용하여 읽기 전용 복제본의 쿼리에 항상 라이터 DB 인스턴스의 최신 업데이트가 표시되게 할 수 있습니다. 이는 다른 세션이나 다른 클러스터에서 제출된 경우에도 마찬가지입니다. 애플리케이션에 대해 이러한 유형의 동작을 지정하려면 세션 수준 파라미터 `apg_write_forward.consistency_mode`의 값을 적절히 선택합니다. `apg_write_forward.consistency_mode` 파라미터는 로컬 쓰기 전달이 활성화된 읽기 전용 복제본에만 영향을 미칩니다.

**참고**  
`apg_write_forward.consistency_mode` 파라미터에 대해 `SESSION`, `EVENTUAL`, `GLOBAL` 또는 `OFF` 값을 지정할 수 있습니다. 기본적으로 이 값은 `SESSION`로 설정됩니다. 값을 `OFF`로 설정하면 쓰기 전달이 비활성화됩니다.

일관성 수준을 높이면 애플리케이션은 변경 사항이 읽기 전용 복제본에 전파될 때까지 더 오랜 시간 동안 대기합니다. 낮은 지연 시간과 쿼리가 실행되기 전에 다른 위치에서 변경한 내용을 완전히 사용할 수 있도록 보장하는 것 사이의 균형을 선택할 수 있습니다.

사용 가능한 각 일관성 보장 모드 설정의 효과는 다음과 같습니다.
+ `SESSION` - 로컬 쓰기 전달을 사용하는 읽기 전용 복제본의 세션이 해당 세션에서 수행한 모든 변경의 결과를 표시합니다. 변경 내용은 트랜잭션이 커밋되었는지 여부와 상관없이 표시됩니다. 필요한 경우 쿼리는 전달된 쓰기 작업의 결과가 현재 리더 DB 인스턴스로 복제될 때까지 대기합니다. 쿼리는 현재 DB 클러스터 내의 다른 세션에서 수행한 쓰기 작업에서 업데이트된 결과가 나올 때까지 대기하지 않습니다.
+ `EVENTUAL` - 로컬 쓰기 전달을 사용하는 읽기 전용 복제본의 세션이 복제 지연으로 인해 약간 오래된 데이터를 표시할 수 있습니다. 쓰기 작업이 라이터 DB 인스턴스에서 수행되어 읽기 전용 복제본에 복제될 때까지 동일한 세션에서의 쓰기 작업 결과가 표시되지 않습니다. 쿼리는 업데이트된 결과를 사용할 수 있을 때까지 대기하지 않습니다. 따라서 쿼리는 명령문의 타이밍 및 복제 지연 양에 따라 이전 데이터 또는 업데이트된 데이터를 검색할 수 있습니다.
+ `GLOBAL` - 읽기 전용 복제본의 세션에 해당 세션에서 변경한 내용이 표시됩니다. 또한 라이터 DB 인스턴스 및 기타 읽기 전용 복제본에서 커밋된 모든 변경 내용도 표시됩니다. 각 쿼리는 세션 지연 양에 따라 다른 기간 동안 대기할 수 있습니다. 쿼리가 시작된 시간을 기준으로, 읽기 전용 복제본이 라이터 DB 인스턴스에서 커밋된 모든 데이터로 최신 상태가 되면 쿼리가 진행됩니다.
**참고**  
글로벌 일관성 모드는 세션 내에서 실행되는 쿼리의 지연 시간에 영향을 미칩니다. 세션에서 쓰기 쿼리를 전송하지 않은 경우에도 대기를 수행합니다.
+ `OFF` - 로컬 쓰기 전달이 비활성화되었습니다.

쓰기 전달을 사용하는 세션에서는 `REPEATABLE READ` 및 `READ COMMITTED` 격리 수준을 사용할 수 있습니다. 하지만 `SERIALIZABLE` 격리 수준은 지원되지 않습니다.

 쓰기 전달과 관련된 모든 파라미터에 대한 자세한 내용은 [쓰기 전달을 위한 기본 파라미터 설정](aurora-postgresql-write-forwarding-understanding.md#aurora-postgresql-write-forwarding-params) 단원을 참조하십시오.

## 쓰기 전달을 사용한 트랜잭션 액세스 모드
<a name="aurora-postgresql-write-forwarding-txns"></a>

트랜잭션 액세스 모드가 읽기 전용으로 설정된 경우 로컬 쓰기 전달이 사용되지 않습니다. DB 클러스터에 연결되어 있고 로컬 쓰기 전달이 활성화된 세션에 연결되어 있는 경우에만 읽기 쓰기를 사용하도록 액세스 모드를 설정할 수 있습니다.

트랜잭션 액세스 모드에 대한 자세한 내용은 [트랜잭션 설정](https://www.postgresql.org/docs/current/sql-set-transaction.html)을 참조하세요.

# Aurora PostgreSQL에 대한 로컬 쓰기 전달 작업
<a name="aurora-postgresql-write-forwarding-understanding"></a>

다음 섹션을 사용하여 데이터베이스 클러스터에 로컬 쓰기 전달이 활성화되어 있는지 확인하고, 호환성 고려 사항을 확인하며, 구성 가능한 파라미터 및 인증 설정을 참조할 수 있습니다. 이 정보는 Aurora PostgreSQL의 로컬 쓰기 전달 기능을 효과적으로 활용할 수 있는 세부 정보를 제공합니다.

**참고**  
로컬 쓰기 전달을 사용하는 클러스터의 라이터 인스턴스가 다시 시작되면 로컬 쓰기 전달을 사용하는 리더 인스턴스의 활성 상태이며 전달된 트랜잭션 및 쿼리가 모두 자동으로 닫힙니다. 라이터 인스턴스를 다시 사용할 수 있게 되면 이러한 트랜잭션을 다시 시도할 수 있습니다.

## DB 클러스터에 로컬 쓰기 전달이 활성화되어 있는지 확인
<a name="aurora-postgresql-write-forwarding-describing"></a>

DB 클러스터에서 로컬 쓰기 전달을 사용할 수 있는지 확인하려면 클러스터에 `LocalWriteForwardingStatus` 속성이 `enabled`로 되어 있는지 확인합니다.

‎‎AWS Management Console에서 클러스터의 세부 정보 페이지 **구성** 탭에서 **로컬 읽기 복제본 쓰기 전달**이 **활성화됨** 상태인 것을 볼 수 있습니다.‎‎

모든 클러스터에 대한 로컬 쓰기 전달 설정의 상태를 보려면 다음 AWS CLI 명령을 실행합니다.

**Example**  

```
aws rds describe-db-clusters \
--query '*[].{DBClusterIdentifier:DBClusterIdentifier,LocalWriteForwardingStatus:LocalWriteForwardingStatus}'

[
{
"LocalWriteForwardingStatus": "enabled",
"DBClusterIdentifier": "write-forwarding-test-cluster-1"
},
{
"LocalWriteForwardingStatus": "disabled",
"DBClusterIdentifier": "write-forwarding-test-cluster-2"
},
{
"LocalWriteForwardingStatus": "requested",
"DBClusterIdentifier": "test-global-cluster-2"
},
{
"LocalWriteForwardingStatus": "null",
"DBClusterIdentifier": "aurora-postgresql-v2-cluster"
}
]
```

DB 클러스터는 `LocalWriteForwardingStatus`에 대해 다음과 같은 값을 가질 수 있습니다.
+ `disabled` - 로컬 쓰기 전달이 비활성화되었습니다.
+ `disabling` - 로컬 쓰기 전달을 비활성화하는 중입니다.
+ `enabled` - 로컬 쓰기 전달이 활성화되었습니다.
+ `enabling` - 로컬 쓰기 전달을 활성화하는 중입니다.
+ `null` - 이 DB 클러스터에서는 로컬 쓰기 전달을 사용할 수 없습니다.
+ `requested` - 로컬 쓰기 전달이 요청되었지만 아직 활성 상태가 아닙니다.

## 쓰기 전달을 위한 기본 파라미터 설정
<a name="aurora-postgresql-write-forwarding-params"></a>

Aurora 클러스터 파라미터 그룹에는 로컬 쓰기 전달 기능에 대한 설정이 포함되어 있습니다. 이러한 파라미터는 클러스터 파라미터이므로 각 클러스터의 모든 DB 인스턴스에 이러한 변수의 동일한 값이 있어야 합니다. 이러한 파라미터에 대한 자세한 내용은 다음 표에 요약되어 있으며, 표 뒤에 사용 참고 사항이 나와 있습니다.


| 파라미터 | 범위 | 유형 | 기본값 | 유효값 | 
| --- | --- | --- | --- | --- | 
| apg\$1write\$1forward.connect\$1timeout | 세션 | 초 | 30 | 0–2147483647 | 
| apg\$1write\$1forward.consistency\$1mode | 세션 | enum | 세션 | SESSION, EVENTUAL, GLOBAL, 및 OFF | 
| apg\$1write\$1forward.idle\$1in\$1transaction\$1session\$1timeout | 세션 | 밀리초 | 86400000 | 0–2147483647 | 
| apg\$1write\$1forward.idle\$1session\$1timeout | 세션 | 밀리초 | 300000 | 0–2147483647 | 
| apg\$1write\$1forward.max\$1forwarding\$1connections\$1percent | 전 세계 | int | 25 | 1–100 | 

`apg_write_forward.max_forwarding_connections_percent` 파라미터는 리더에서 전달된 쿼리를 처리하기 위해 사용할 수 있는 데이터베이스 연결의 상한입니다. 이 값은 라이터 DB 인스턴스에 대한 `max_connections` 설정의 백분율로 표시됩니다. 예를 들어 `max_connections`가 `800`이고 `apg_write_forward.max_forwarding_connections_percent`가 `10`이면 라이터는 최대 80개의 동시 전달 세션을 허용합니다. 이러한 연결은 `max_connections` 설정을 통해 관리되는 동일한 연결 풀에서 발생합니다. 이 설정은 클러스터에 로컬 쓰기 전달이 활성화된 경우 라이터 DB 인스턴스에만 적용됩니다.

다음 설정을 사용하여 로컬 쓰기 전달 요청을 제어합니다.
+ `apg_write_forward.consistency_mode` - 읽기 전용 복제본에서 읽기 일관성 정도를 제어하는 세션 수준 파라미터입니다. 유효한 값은 `SESSION`, `EVENTUAL`, `GLOBAL` 또는 `OFF`입니다. 기본적으로 이 값은 `SESSION`로 설정됩니다. 값을 `OFF`로 설정하면 세션에서 로컬 쓰기 전달이 비활성화됩니다. 일관성 수준에 대한 자세한 내용은 [Aurora PostgreSQL에서 로컬 쓰기 전달의 일관성 및 격리](aurora-postgresql-write-forwarding-configuring.md#aurora-postgresql-write-forwarding-isolation) 단원을 참조하세요. 이 파라미터는 로컬 쓰기 전달이 활성화되어 있는 리더 인스턴스에만 적용됩니다.
+ `apg_write_forward.connect_timeout` - 라이터 DB 인스턴스에 연결할 때 읽기 전용 복제본이 연결을 끊기 전에 대기하는 최대 시간(초)입니다. 값이 `0`이면 무한정 대기할 수 있다는 뜻입니다.
+ `apg_write_forward.idle_in_transaction_session_timeout` - 라이터 DB 인스턴스가 연결을 닫기 전에 트랜잭션이 열려 있는 읽기 전용 복제본에서 전달된 연결의 활동을 기다리는 시간(밀리초)입니다. 세션이 이 기간을 넘어 트랜잭션에서 유휴 상태로 유지되면 Aurora에서 세션이 종료됩니다. `0` 값은 제한 시간을 비활성화합니다.
+ `apg_write_forward.idle_session_timeout` - 라이터 DB 인스턴스가 연결을 닫기 전에 읽기 전용 복제본에서 전달된 연결의 활동을 기다리는 시간(밀리초)입니다. 세션이 이 기간을 넘어 유휴 상태로 유지되면 Aurora에서 세션이 종료됩니다. `0` 값은 제한 시간을 비활성화합니다.

## rdswriteforwarduser
<a name="aurora-postgresql-write-forwarding-rdswriteforwarduser"></a>

 `rdswriteforwarduser`는 읽기 전용 복제본과 라이터 DB 인스턴스 간의 연결을 설정하는 데 사용할 사용자입니다.

**참고**  
`rdswriteforwarduser`는 PUBLIC 역할을 통해 CONNECT 권한을 고객 데이터베이스에 상속합니다. PUBLIC 역할에 대한 권한이 취소된 경우 쓰기를 전달해야 하는 데이터베이스에 대한 CONNECT 권한을 부여해야 합니다.

# Aurora PostgreSQL에서 로컬 쓰기 전달 모니터링
<a name="aurora-postgresql-write-forwarding-monitoring"></a>

다음 섹션을 사용하면 관련 CloudWatch 지표 및 대기 이벤트를 포함하여 Aurora PostgreSQL 클러스터의 로컬 쓰기 전달을 모니터링하여 성능을 추적하고 잠재적 문제를 식별할 수 있습니다.

## 쓰기 전달을 위한 Amazon CloudWatch 지표 및 Aurora PostgreSQL 상태 변수
<a name="aurora-postgresql-write-forwarding-cloudwatch"></a>

 다음 Amazon CloudWatch 지표는 하나 이상의 읽기 전용 복제본에서 쓰기 전달을 사용하는 라이터 DB 인스턴스에 적용됩니다.


| CloudWatch 지표 | 단위 및 설명 | 
| --- | --- | 
| `AuroraLocalForwardingWriterDMLThroughput`  | 개수(초당). 이 라이터 DB 인스턴스에서 초당 처리되는 전달된 DML 문 수입니다. | 
|  `AuroraLocalForwardingWriterOpenSessions`  | 개수. 전달된 쿼리를 처리하는 이 라이터 DB 인스턴스의 열린 세션 수입니다. | 
|  `AuroraLocalForwardingWriterTotalSessions`  | 개수. 라이터 DB 인스턴스에 있는 전달된 세션의 총 개수입니다. | 

 다음 CloudWatch 지표는 각 읽기 전용 복제본에 적용됩니다. 이러한 지표는 로컬 쓰기 전달이 활성화된 DB 클러스터의 각 리더 DB 인스턴스에서 측정됩니다.


| CloudWatch 지표 | 단위 및 설명 | 
| --- | --- | 
|  `AuroraForwardingReplicaCommitThroughput` |  개수(초당). 이 복제본이 초당 전달하는 세션의 커밋 수입니다. | 
|  `AuroraForwardingReplicaDMLLatency` |  밀리초. 복제본에 있는 전달된 DML의 평균 응답 시간(밀리초)입니다. | 
|  `AuroraForwardingReplicaDMLThroughput` |  개수(초당). 이 복제본에서 초당 처리되는 전달된 DML 문 수입니다. | 
|  `AuroraForwardingReplicaErrorSessionsLimit` |  개수. 최대 연결 또는 최대 쓰기 전달 연결 한도에 도달하여 라이터 DB 인스턴스에서 거부한 세션 수입니다. | 
|  `AuroraForwardingReplicaOpenSessions`  |  개수. 복제본 인스턴스에서 로컬 쓰기 전달을 사용하는 세션 수입니다. | 
|  `AuroraForwardingReplicaReadWaitLatency` | 밀리초. 복제본이 라이터 DB 인스턴스의 LSN과 일치할 때까지 기다리는 평균 대기 시간(밀리초)입니다. 리더 DB 인스턴스가 대기하는 정도는 apg\$1write\$1forward.consistency\$1mode 설정에 따라 다릅니다. 이 설정에 대한 자세한 내용은 [Aurora PostgreSQL에서 쓰기 전달에 대한 구성 파라미터](aurora-global-database-write-forwarding-apg.md#aurora-global-database-write-forwarding-params-apg) 섹션을 참조하세요. | 

## Aurora PostgreSQL에서 로컬 쓰기 전달을 위한 대기 이벤트
<a name="aurora-postgresql-write-forwarding-wait-events-apg"></a>

Amazon Aurora는 Aurora PostgreSQL에서 쓰기 전달을 사용할 때 다음과 같은 대기 이벤트를 생성합니다.

**Topics**
+ [IPC:AuroraWriteForwardConnect](#apg-waits.ipcaurorawriteforwardconnect)
+ [IPC:AuroraWriteForwardConsistencyPoint](#apg-waits.ipcaurorawriteforwardconsistencypoint)
+ [IPC:AuroraWriteForwardExecute](#apg-waits.ipc:aurorawriteforwardexecute)
+ [IPC:AuroraWriteForwardGetGlobalConsistencyPoint](#apg-waits.ipc:aurorawriteforwardgetglobalconsistencypoint)
+ [IPC:AuroraWriteForwardXactAbort](#apg-waits.ipc:aurorawriteforwardxactabort)
+ [IPC:AuroraWriteForwardXactCommit](#apg-waits.ipc:aurorawriteforwardxactcommit)
+ [IPC:AuroraWriteForwardXactStart](#apg-waits.ipc:aurorawriteforwardxactstart)

### IPC:AuroraWriteForwardConnect
<a name="apg-waits.ipcaurorawriteforwardconnect"></a>

이 `IPC:AuroraWriteForwardConnect` 이벤트는 읽기 전용 복제본의 백엔드 프로세스가 라이터 DB 인스턴스에 대한 연결이 열릴 때까지 기다리고 있을 때 발생합니다.

**대기 증가의 가능한 원인**

이 이벤트는 읽기 전용 복제본에서 라이터 노드로의 연결 시도 횟수가 늘어날수록 증가합니다.

**작업**

읽기 전용 복제본에서 라이터 노드로의 동시 연결 수를 줄이세요.

### IPC:AuroraWriteForwardConsistencyPoint
<a name="apg-waits.ipcaurorawriteforwardconsistencypoint"></a>

`IPC:AuroraWriteForwardConsistencyPoint` 이벤트는 전달된 쓰기 작업의 결과가 현재 리전으로 복제될 때까지 읽기 전용 복제본에서 노드에서 대기하는 시간을 나타냅니다. 이 이벤트는 세션 수준 `apg_write_forward.consistency_mode` 파라미터가 다음 중 하나로 설정된 경우에만 생성됩니다.
+ `SESSION` - 읽기 전용 복제본에 대한 쿼리는 해당 세션에서 수행한 모든 변경의 결과를 대기합니다.
+ `GLOBAL` - 읽기 전용 복제본에 대한 쿼리는 해당 세션의 변경 사항과 라이터 DB 인스턴스 및 읽기 전용 복제본 모두에서 커밋된 모든 변경 사항의 결과를 기다립니다.

`apg_write_forward.consistency_mode` 파라미터 설정에 대한 자세한 내용은 [Aurora PostgreSQL에서 쓰기 전달에 대한 구성 파라미터](aurora-global-database-write-forwarding-apg.md#aurora-global-database-write-forwarding-params-apg) 섹션을 참조하세요.

**대기 증가의 가능한 원인**

대기 시간이 길어지는 일반적인 원인은 다음과 같습니다.
+ Amazon CloudWatch `ReplicaLag` 지표로 측정한 바와 같이 복제 지연이 증가했습니다. 이 지표에 대한 자세한 정보는 [Aurora PostgreSQL 복제 모니터링](AuroraPostgreSQL.Replication.md#AuroraPostgreSQL.Replication.Monitoring) 섹션을 참조하세요.
+ 라이터 DB 인스턴스 또는 읽기 전용 복제본에 대한 로드가 증가했습니다.

**작업**

애플리케이션 요구 사항에 따라 일관성 모드를 변경합니다.

### IPC:AuroraWriteForwardExecute
<a name="apg-waits.ipc:aurorawriteforwardexecute"></a>

`IPC:AuroraWriteForwardExecute` 이벤트는 읽기 전용 복제본의 백엔드 프로세스가 전달된 쿼리가 완료되고 DB 클러스터의 라이터 노드로부터 결과를 얻기를 기다리고 있을 때 발생합니다.

**대기 증가의 가능한 원인**

대기가 늘어나는 일반적인 원인은 다음과 같습니다.
+ 라이터 노드에서 많은 수의 행을 가져옵니다.
+ 라이터 노드와 읽기 전용 복제본 사이의 네트워크 지연 시간이 증가하면 읽기 전용 복제본이 라이터 노드로부터 데이터를 수신하는 데 걸리는 시간이 늘어납니다.
+ 읽기 전용 복제본의 로드가 증가하면 읽기 전용 복제본에서 라이터 노드로 쿼리 요청을 전송하는 것이 지연될 수 있습니다.
+ 라이터 노드의 로드가 증가하면 라이터 노드에서 읽기 전용 복제본으로의 데이터 전송이 지연될 수 있습니다.

**작업**

대기 이벤트의 원인에 따라 다른 작업을 권장합니다.
+ 필요한 데이터만 검색하도록 쿼리를 최적화합니다.
+ 데이터 조작 언어(DML) 작업을 최적화하여 필요한 데이터만 수정합니다.
+ 읽기 전용 복제본 또는 라이터 노드가 CPU 또는 네트워크 대역폭의 제약을 받는 경우 CPU 용량이 더 크거나 네트워크 대역폭이 더 큰 인스턴스 유형으로 변경하는 것이 좋습니다.

### IPC:AuroraWriteForwardGetGlobalConsistencyPoint
<a name="apg-waits.ipc:aurorawriteforwardgetglobalconsistencypoint"></a>

`IPC:AuroraWriteForwardGetGlobalConsistencyPoint` 이벤트는 글로벌 일관성 모드를 사용하는 읽기 전용 복제본의 백엔드 프로세스가 쿼리를 실행하기 전에 라이터 노드로부터 글로벌 일관성 보장 지점을 가져오기를 기다리고 있을 때 발생합니다.

**대기 증가의 가능한 원인**

대기가 늘어나는 일반적인 원인은 다음과 같습니다.
+ 읽기 전용 복제본과 라이터 노드 사이의 네트워크 지연 시간이 증가하면 읽기 전용 복제본이 라이터 노드로부터 데이터를 수신하는 데 걸리는 시간이 늘어납니다.
+ 읽기 전용 복제본의 로드가 증가하면 읽기 전용 복제본에서 라이터 노드로 쿼리 요청을 전송하는 것이 지연될 수 있습니다.
+ 라이터 노드의 로드가 증가하면 라이터 노드에서 읽기 전용 복제본으로의 데이터 전송이 지연될 수 있습니다.

**작업**

대기 이벤트의 원인에 따라 다른 작업을 권장합니다.
+ 애플리케이션 요구 사항에 따라 일관성 모드를 변경합니다.
+ 읽기 전용 복제본 또는 라이터 노드가 CPU 또는 네트워크 대역폭의 제약을 받는 경우 CPU 용량이 더 크거나 네트워크 대역폭이 더 큰 인스턴스 유형으로 변경하는 것이 좋습니다.

### IPC:AuroraWriteForwardXactAbort
<a name="apg-waits.ipc:aurorawriteforwardxactabort"></a>

`IPC:AuroraWriteForwardXactAbort` 이벤트는 읽기 전용 복제본의 백엔드 프로세스가 원격 정리 쿼리 결과를 기다리고 있을 때 발생합니다. 쓰기 전달 트랜잭션이 중단된 후 프로세스를 적절한 상태로 되돌리기 위해 정리 쿼리가 실행됩니다. Amazon Aurora는 오류가 발견되었거나 사용자가 명시적인 `ABORT` 명령을 실행했거나 실행 중인 쿼리를 취소했을 때 이러한 작업을 수행합니다.

**대기 증가의 가능한 원인**

대기가 늘어나는 일반적인 원인은 다음과 같습니다.
+ 읽기 전용 복제본과 라이터 노드 사이의 네트워크 지연 시간이 증가하면 읽기 전용 복제본이 라이터 노드로부터 데이터를 수신하는 데 걸리는 시간이 늘어납니다.
+ 읽기 전용 복제본의 로드가 증가하면 읽기 전용 복제본에서 라이터 노드로 정리 쿼리 요청을 전송하는 것이 지연될 수 있습니다.
+ 라이터 노드의 로드가 증가하면 라이터 노드에서 읽기 전용 복제본으로의 데이터 전송이 지연될 수 있습니다.

**작업**

대기 이벤트의 원인에 따라 다른 작업을 권장합니다.
+ 트랜잭션이 중단된 원인을 조사하세요.
+ 읽기 전용 복제본 또는 라이터 DB 인스턴스가 CPU 또는 네트워크 대역폭의 제약을 받는 경우 CPU 용량이 더 크거나 네트워크 대역폭이 더 큰 인스턴스 유형으로 변경하는 것이 좋습니다.

### IPC:AuroraWriteForwardXactCommit
<a name="apg-waits.ipc:aurorawriteforwardxactcommit"></a>

`IPC:AuroraWriteForwardXactCommit` 이벤트는 읽기 전용 복제본의 백엔드 프로세스가 전달된 커밋 트랜잭션 명령의 결과를 기다리고 있을 때 발생합니다.

**대기 증가의 가능한 원인**

대기가 늘어나는 일반적인 원인은 다음과 같습니다.
+ 읽기 전용 복제본과 라이터 노드 사이의 네트워크 지연 시간이 증가하면 읽기 전용 복제본이 라이터 노드로부터 데이터를 수신하는 데 걸리는 시간이 늘어납니다.
+ 읽기 전용 복제본의 로드가 증가하면 읽기 전용 복제본에서 라이터 노드로 쿼리 요청을 전송하는 것이 지연될 수 있습니다.
+ 라이터 노드의 로드가 증가하면 라이터 노드에서 읽기 전용 복제본으로의 데이터 전송이 지연될 수 있습니다.

**작업**

읽기 전용 복제본 또는 라이터 노드가 CPU 또는 네트워크 대역폭의 제약을 받는 경우 CPU 용량이 더 크거나 네트워크 대역폭이 더 큰 인스턴스 유형으로 변경하는 것이 좋습니다.

### IPC:AuroraWriteForwardXactStart
<a name="apg-waits.ipc:aurorawriteforwardxactstart"></a>

`IPC:AuroraWriteForwardXactStart` 이벤트는 읽기 전용 복제본의 백엔드 프로세스가 전달된 시작 트랜잭션 명령의 결과를 기다리고 있을 때 발생합니다.

**대기 증가의 가능한 원인**

대기가 늘어나는 일반적인 원인은 다음과 같습니다.
+ 읽기 전용 복제본과 라이터 노드 사이의 네트워크 지연 시간이 증가하면 읽기 전용 복제본이 라이터 노드로부터 데이터를 수신하는 데 걸리는 시간이 늘어납니다.
+ 읽기 전용 복제본의 로드가 증가하면 읽기 전용 복제본에서 라이터 노드로 쿼리 요청을 전송하는 것이 지연될 수 있습니다.
+ 라이터 노드의 로드가 증가하면 라이터 노드에서 읽기 전용 복제본으로의 데이터 전송이 지연될 수 있습니다.

**작업**

읽기 전용 복제본 또는 라이터 노드가 CPU 또는 네트워크 대역폭의 제약을 받는 경우 CPU 용량이 더 크거나 네트워크 대역폭이 더 큰 인스턴스 유형으로 변경하는 것이 좋습니다.