Aurora MySQL 글로벌 데이터베이스에서 쓰기 전달 사용
주제
- Aurora MySQL의 쓰기 전달을 사용할 수 있는 리전 및 버전
- Aurora MySQL에서 쓰기 전달 활성화
- Aurora MySQL에서 보조 클러스터에 쓰기 전달이 활성화되어 있는지 확인
- Aurora MySQL에서 쓰기 전달과 애플리케이션 및 SQL 호환성
- Aurora MySQL에서 쓰기 전달의 격리 및 일관성
- Aurora MySQL에서 쓰기 전달을 사용하여 멀티파트 문 실행
- Aurora MySQL에서 쓰기 전달을 사용한 트랜잭션
- Aurora MySQL에서 쓰기 전달에 대한 구성 파라미터
- Aurora MySQL에서 쓰기 전달에 대한 Amazon CloudWatch 지표
Aurora MySQL의 쓰기 전달을 사용할 수 있는 리전 및 버전
쓰기 전달은 Aurora MySQL 기반 글로벌 데이터베이스를 사용할 수 있는 모든 리전에서 Aurora MySQL 2.08.1 이상 버전에 지원됩니다.
Aurora MySQL 글로벌 데이터베이스의 버전 및 리전 가용성에 대한 자세한 정보는 Aurora MySQL을 사용하는 Aurora 전역 데이터베이스 섹션을 참조하세요.
Aurora MySQL에서 쓰기 전달 활성화
기본적으로 Aurora 글로벌 데이터베이스에 보조 클러스터를 추가할 때는 쓰기 전달이 활성화되지 않습니다.
AWS Management Console을 사용하여 쓰기 전달을 활성화하려면 글로벌 데이터베이스에 대해 리전을 추가할 때 읽기 전용 복제본 쓰기 전달에서 읽기 전용 복제본 쓰기 전달 켜기 확인란을 선택합니다. 기존 보조 클러스터의 경우 전역 쓰기 전달 켜기로 클러스터를 수정합니다. 쓰기 전달을 끄려면 리전을 추가하거나 보조 클러스터를 수정할 때 전역 쓰기 전달 켜기 확인란의 선택을 취소합니다.
AWS CLI를 사용하여 쓰기 전달을 활성화하려면 --enable-global-write-forwarding
옵션을 사용합니다. 이 옵션은 create-db-cluster
명령을 사용하여 새 보조 클러스터를 생성할 때 작동합니다. 이 옵션은 modify-db-cluster
명령을 사용하여 기존 보조 클러스터를 수정할 때도 작동합니다. 이렇게 하려면 글로벌 데이터베이스에서 쓰기 전달을 지원하는 Aurora 버전을 사용해야 합니다. 이러한 동일한 CLI 명령과 함께 --no-enable-global-write-forwarding
옵션을 사용하여 쓰기 전달을 끌 수 있습니다.
Amazon RDS API를 사용하여 쓰기 전달을 활성화하려면 EnableGlobalWriteForwarding
파라미터를 true
로 설정합니다. 이 파라미터는 CreateDBCluster
작업을 사용하여 새 보조 클러스터를 생성할 때 작동합니다. 이 파라미터는 ModifyDBCluster
작업을 사용하여 기존 보조 클러스터를 수정할 때도 작동합니다. 이렇게 하려면 글로벌 데이터베이스에서 쓰기 전달을 지원하는 Aurora 버전을 사용해야 합니다. EnableGlobalWriteForwarding
파라미터를 false
로 설정하여 쓰기 전달을 끌 수 있습니다.
참고
데이터베이스 세션에서 쓰기 전달을 사용하기 위해 aurora_replica_read_consistency
구성 파라미터에 대한 설정을 지정합니다. 쓰기 전달 기능을 사용하는 모든 세션에서 이 작업을 수행합니다. 이 파라미터에 대한 자세한 정보는 Aurora MySQL에서 쓰기 전달의 격리 및 일관성를 참조하십시오.
RDS 프록시 기능은 aurora_replica_read_consistency
변수에 대한 SESSION
값을 지원하지 않습니다. 이 값을 설정하면 예상하지 못한 동작이 일어날 수 있습니다.
다음 CLI 예제에서는 쓰기 전달이 활성화되거나 비활성화된 상태로 Aurora 글로벌 데이터베이스를 설정하는 방법을 보여 줍니다. 강조 표시된 항목은 Aurora 글로벌 데이터베이스에 대한 인프라를 설정할 때 지정하고 일관성을 유지해야 할 중요한 명령 및 옵션을 나타냅니다.
다음 예제에서는 쓰기 전달이 활성화된 상태로 Aurora 글로벌 데이터베이스, 기본 클러스터 및 보조 클러스터를 생성합니다. 사용자 이름, 암호, 기본 및 보조 AWS 리전을 직접 선택한 항목으로 대체합니다.
# Create overall global database. aws rds create-global-cluster --global-cluster-identifier write-forwarding-test \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region
us-east-1
# Create primary cluster, in the same AWS Region as the global database. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-1 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --master-usernameuser_name
--master-user-passwordpassword
\ --regionus-east-1
aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \ --db-instance-identifier write-forwarding-test-cluster-1-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --regionus-east-1
aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \ --db-instance-identifier write-forwarding-test-cluster-1-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --regionus-east-1
# Create secondary cluster, in a different AWS Region than the global database, # with write forwarding enabled. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-2 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --regionus-east-2
\ --enable-global-write-forwarding aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --regionus-east-2
aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --regionus-east-2
다음 예제는 이전 예제에서 계속됩니다. 쓰기 전달이 활성화되지 않은 상태로 보조 클러스터를 생성한 다음, 쓰기 전달을 활성화합니다. 이 예제가 완료된 후에는 글로벌 데이터베이스의 모든 보조 클러스터에 쓰기 전달이 활성화됩니다.
# Create secondary cluster, in a different AWS Region than the global database, # without write forwarding enabled. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-2 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region
us-west-1
aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --regionus-west-1
aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --regionus-west-1
aws rds modify-db-cluster --db-cluster-identifier write-forwarding-test-cluster-2 \ --regionus-east-2
\ --enable-global-write-forwarding
Aurora MySQL에서 보조 클러스터에 쓰기 전달이 활성화되어 있는지 확인
보조 클러스터에서 쓰기 전달을 사용할 수 있는지 여부를 확인하려면 클러스터에 "GlobalWriteForwardingStatus": "enabled"
특성이 있는지 여부를 확인할 수 있습니다.
AWS Management Console에서 클러스터의 세부 정보 페이지 구성 탭에서 전역 읽기 복제본 쓰기 전달이 활성화됨 상태인 것을 볼 수 있습니다.
모든 클러스터에 대한 글로벌 쓰기 전달 설정의 상태를 보려면 다음 AWS CLI 명령을 실행합니다.
보조 클러스터에는 쓰기 전달이 켜져 있는지 또는 꺼져 있는지를 나타내는 "enabled"
또는 "disabled"
값이 표시됩니다. null
값은 해당 클러스터에 쓰기 전달을 사용할 수 없음을 나타냅니다. 클러스터가 글로벌 데이터베이스의 일부가 아니거나, 보조 클러스터 대신 기본 클러스터입니다. 또한 쓰기 전달이 켜지거나 꺼지는 중인 경우 이 값은 "enabling"
또는 "disabling"
일 수 있습니다.
aws rds describe-db-clusters \ --query '*[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus}' [ { "GlobalWriteForwardingStatus": "enabled", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1" }, { "GlobalWriteForwardingStatus": "disabled", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-2" }, { "GlobalWriteForwardingStatus": null, "DBClusterIdentifier": "non-global-cluster" } ]
글로벌 쓰기 전달이 활성화된 모든 보조 클러스터를 찾으려면 다음 명령을 실행하십시오. 이 명령은 또한 클러스터의 판독기 엔드포인트를 반환합니다. Aurora 글로벌 데이터베이스에서 보조 클러스터에서 기본 클러스터로의 쓰기 전달을 사용할 때는 보조 클러스터의 읽기 장치 엔드포인트를 사용합니다.
예
aws rds describe-db-clusters --query 'DBClusters[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus,ReaderEndpoint:ReaderEndpoint} | [?GlobalWriteForwardingStatus == `enabled`]' [ { "GlobalWriteForwardingStatus": "enabled", "ReaderEndpoint": "aurora-write-forwarding-test-replica-1.cluster-ro-cnpexample.us-west-2.rds.amazonaws.com", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1" } ]
Aurora MySQL에서 쓰기 전달과 애플리케이션 및 SQL 호환성
다음과 같은 종류의 SQL 문을 쓰기 전달과 함께 사용할 수 있습니다.
-
INSERT
,DELETE
및UPDATE
와 같은 데이터 조작 언어(DML) 문입니다. 다음 설명과 같이, 쓰기 전달과 함께 사용할 수 있는 이러한 명령문의 속성에는 몇 가지 제한 사항이 있습니다. -
SELECT ... LOCK IN SHARE MODE
및SELECT FOR UPDATE
문입니다. -
PREPARE
및EXECUTE
문입니다.
특정 명령문은 쓰기 전달과 함께 글로벌 데이터베이스에서 사용할 때 허용되지 않거나 부실 결과를 생성할 수 있습니다. 따라서 EnableGlobalWriteForwarding
설정은 보조 클러스터에 대해 기본적으로 꺼져 있습니다. 이 설정을 켜기 전에, 애플리케이션 코드가 이러한 제한 사항의 영향을 받지 않는지 확인하십시오.
쓰기 전달에 사용하는 SQL 문에는 다음과 같은 제한 사항이 적용됩니다. 일부 경우에는 클러스터 수준에서 쓰기 전달이 활성화된 보조 클러스터에서 명령문을 사용할 수 있습니다. 이 접근 방식은 aurora_replica_read_consistency
구성 파라미터를 통해 세션 내에서 쓰기 전달을 켜지 않은 경우에 작동합니다. 쓰기 전달 때문에 명령문이 허용되지 않을 때 명령문을 사용하려고 시도하면 다음과 같은 형식의 오류 메시지가 나타납니다.
ERROR 1235 (42000): This version of MySQL doesn't yet support '
operation
with write forwarding'.
- 데이터 정의 언어(DDL)
-
기본 클러스터에 연결하여 DDL 문을 실행합니다. 리더 DB 인스턴스에서 실행할 수 없습니다.
- 임시 테이블의 데이터를 사용하여 영구 테이블 업데이트
-
쓰기 전달이 활성화된 보조 클러스터에서 임시 테이블을 사용할 수 있습니다. 하지만 명령문이 임시 테이블을 참조하는 경우 DML 문을 사용하여 영구 테이블을 수정할 수 없습니다. 예를 들어 임시 테이블에서 데이터를 가져오는
INSERT ... SELECT
문을 사용할 수 없습니다. 임시 테이블은 보조 클러스터에 있으며 명령문이 기본 클러스터에서 실행될 때는 임시 테이블을 사용할 수 없습니다. - XA 트랜잭션
-
세션 내에서 쓰기 전달이 켜져 있으면 보조 클러스터에서 다음 문을 사용할 수 없습니다. 쓰기 전달이 활성화되지 않은 보조 클러스터나
aurora_replica_read_consistency
설정이 비어 있는 세션 내에서 이러한 명령문을 사용할 수 있습니다. 세션 내에서 쓰기 전달을 켜기 전에 코드에서 이러한 문을 사용하는지 확인하십시오.XA {START|BEGIN} xid [JOIN|RESUME] XA END xid [SUSPEND [FOR MIGRATE]] XA PREPARE xid XA COMMIT xid [ONE PHASE] XA ROLLBACK xid XA RECOVER [CONVERT XID]
- 영구 테이블에 대한 LOAD 문
-
쓰기 전달이 활성화된 보조 클러스터에서는 다음 명령문을 사용할 수 없습니다.
LOAD DATA INFILE 'data.txt' INTO TABLE t1; LOAD XML LOCAL INFILE 'test.xml' INTO TABLE t1;
보조 클러스터의 임시 테이블로 데이터를 로드할 수 있습니다. 하지만 영구 테이블을 참조하는 모든
LOAD
문을 기본 클러스터에서만 실행해야 합니다. - 플러그인 문
-
쓰기 전달이 활성화된 보조 클러스터에서는 다음 명령문을 사용할 수 없습니다.
INSTALL PLUGIN example SONAME 'ha_example.so'; UNINSTALL PLUGIN example;
- SAVEPOINT 문
-
세션 내에서 쓰기 전달이 켜져 있으면 보조 클러스터에서 다음 문을 사용할 수 없습니다. 쓰기 전달이 설정되어 있지 않은 보조 클러스터나
aurora_replica_read_consistency
설정이 비어 있는 세션 내에서 이러한 문을 사용할 수 있습니다. 세션 내에서 쓰기 전달을 켜기 전에 코드에서 이러한 문을 사용하는지 확인하십시오.SAVEPOINT t1_save; ROLLBACK TO SAVEPOINT t1_save; RELEASE SAVEPOINT t1_save;
Aurora MySQL에서 쓰기 전달의 격리 및 일관성
쓰기 전달을 사용하는 세션에서는 REPEATABLE READ
격리 수준만 사용할 수 있습니다. 보조 READ COMMITTED
리전의 읽기 전용 클러스터에서도 AWS 격리 수준을 사용할 수 있지만, 쓰기 전달에는 해당 격리 수준이 작동하지 않습니다. REPEATABLE READ
및 READ COMMITTED
격리 수준에 대한 자세한 내용은 Aurora MySQL 격리 수준 단원을 참조하십시오.
보조 클러스터에서 읽기 일관성 정도를 제어할 수 있습니다. 읽기 일관성 수준은 기본 클러스터에서 일부 또는 모든 변경 사항이 복제되도록 각 읽기 작업 전에 보조 클러스터가 대기하는 정도를 결정합니다. 읽기 일관성 수준을 조정하여 세션에서 전달된 모든 쓰기 작업이 후속 쿼리 전에 보조 클러스터에 표시되도록 할 수 있습니다. 또한 이 설정을 사용하여 보조 클러스터의 쿼리에 항상 기본 클러스터의 최신 업데이트가 표시되게 할 수 있습니다. 이는 다른 세션이나 다른 클러스터에서 제출된 경우에도 마찬가지입니다. 애플리케이션에 대해 이러한 유형의 동작을 지정하려면 세션 수준 파라미터 aurora_replica_read_consistency
의 값을 선택합니다.
중요
쓰기를 전달할 세션에 대해 항상 aurora_replica_read_consistency
파라미터를 설정합니다. 그렇지 않으면 Aurora에서 해당 세션에 대한 쓰기 전달이 활성화되지 않습니다. 이 파라미터는 기본적으로 비어 있으므로, 이 파라미터를 사용할 때 특정 값을 선택하세요. aurora_replica_read_consistency
파라미터는 쓰기 전달이 활성화된 보조 클러스터에만 영향을 미칩니다.
Aurora MySQL 버전 2 및 3.04보다 낮은 버전 3의 경우 세션 변수로 aurora_replica_read_consistency
를 사용합니다. Aurora MySQL 버전 3.04 이상에서는 세션 변수 또는 DB 클러스터 파라미터로 aurora_replica_read_consistency
를 사용할 수 있습니다.
aurora_replica_read_consistency
매개변수에 대해 EVENTUAL
, SESSION
및 GLOBAL
값을 지정할 수 있습니다.
일관성 수준을 높이면 애플리케이션은 변경 사항이 AWS 리전 간에 전파될 때까지 더 오랜 시간 동안 대기합니다. 빠른 응답 시간과 쿼리가 실행되기 전에 다른 위치에서 변경한 내용을 완전히 사용할 수 있도록 보장하는 것 사이의 균형을 선택할 수 있습니다.
읽기 일관성을 EVENTUAL
로 설정하면 쓰기 전달을 사용하는 보조 AWS 리전의 쿼리가 복제 지연으로 인해 약간 오래된 데이터를 표시할 수 있습니다. 동일한 세션에서 쓰기 작업의 결과는 쓰기 작업이 기본 리전에서 수행되어 현재 리전으로 복제될 때까지 표시되지 않습니다. 쿼리는 업데이트된 결과를 사용할 수 있을 때까지 대기하지 않습니다. 따라서 쿼리는 명령문의 타이밍 및 복제 지연 양에 따라 이전 데이터 또는 업데이트된 데이터를 검색할 수 있습니다.
읽기 일관성을 SESSION
으로 설정하면 쓰기 전달을 사용하는 보조 AWS 리전의 모든 쿼리는 해당 세션에서 수행한 모든 변경의 결과를 표시합니다. 변경 내용은 트랜잭션이 커밋되었는지 여부와 상관없이 표시됩니다. 필요한 경우 쿼리는 전달된 쓰기 작업의 결과가 현재 리전으로 복제될 때까지 대기합니다. 쿼리는 다른 리전이나 현재 리전 내의 다른 세션에서 수행한 쓰기 작업에서 업데이트된 결과가 나올 때까지 대기하지 않습니다.
읽기 일관성을 GLOBAL
로 설정하면 보조 AWS 리전의 세션에는 해당 세션에서 변경한 내용이 표시됩니다. 또한 기본 AWS 리전 및 기타 보조 AWS 리전에서 커밋된 모든 변경 내용도 표시됩니다. 각 쿼리는 세션 지연 양에 따라 다른 기간 동안 대기할 수 있습니다. 쿼리가 시작된 시간을 기준으로, 보조 클러스터가 기본 클러스터에서 커밋된 모든 데이터로 최신 상태가 되면 쿼리가 진행됩니다.
쓰기 전달과 관련된 모든 파라미터에 대한 자세한 내용은 Aurora MySQL에서 쓰기 전달에 대한 구성 파라미터 단원을 참조하십시오.
쓰기 전달 사용의 예제
이 예시에서는 aurora_replica_read_consistency
를 세션 변수로 사용합니다. Aurora MySQL 버전 3.04 이상에서는 세션 변수 또는 DB 클러스터 파라미터로 aurora_replica_read_consistency
를 사용할 수 있습니다.
다음 예제에서, 기본 클러스터는 US East (N. Virginia) 리전에 있습니다. 보조 클러스터는 미국 동부(오하이오) 리전에 있습니다. 이 예에서는 INSERT
문 다음에 SELECT
문을 실행하는 결과를 보여 줍니다. aurora_replica_read_consistency
설정의 값에 따라, 결과는 명령문의 타이밍에 따라 다를 수 있습니다. 일관성을 높이기 위해 SELECT
문을 실행하기 전에 잠시 기다립니다. 또는 Aurora은(는) SELECT
을(를) 계속하기 전에 결과 복제가 완료될 때까지 자동으로 대기할 수 있습니다.
이 예제에는 eventual
의 읽기 일관성 설정이 있습니다. INSERT
문 바로 다음에 SELECT
문을 실행하면 여전히 COUNT(*)
의 값이 반환됩니다. 이 값은 새로운 행이 삽입되기 전의 행 수를 반영합니다. 잠시 후에 SELECT
를 다시 실행하면 업데이트된 행 수가 반환됩니다. SELECT
명령문은 대기하지 않습니다.
mysql> set aurora_replica_read_consistency = 'eventual'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> insert into t1 values (6); select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.00 sec)
읽기 일관성 설정이 session
인 경우 INSERT
직후 SELECT
명령문은 INSERT
명령문의 변경 사항이 표시될 때까지 대기합니다. 후속 SELECT
명령문은 대기하지 않습니다.
mysql> set aurora_replica_read_consistency = 'session'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.01 sec) mysql> insert into t1 values (6); select count(*) from t1; select count(*) from t1; Query OK, 1 row affected (0.08 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.37 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.00 sec)
읽기 일관성 설정이 여전히 session
인 경우, INSERT
문을 수행한 후 짧은 대기 시간을 도입하면 다음 번 SELECT
문이 실행되는 시간까지 업데이트된 행 수를 사용할 수 있습니다.
mysql> insert into t1 values (6); select sleep(2); select count(*) from t1; Query OK, 1 row affected (0.07 sec) +----------+ | sleep(2) | +----------+ | 0 | +----------+ 1 row in set (2.01 sec) +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.00 sec)
읽기 일관성 설정이 global
인 경우, 각 SELECT
문은 쿼리를 수행하기 전에 명령문의 시작 시간을 기준으로 모든 데이터 변경 사항이 표시되도록 보장하기 위해 대기합니다. 각 SELECT
문에 대한 대기 시간은 기본 클러스터와 보조 클러스터 간의 복제 지연 양에 따라 다릅니다.
mysql> set aurora_replica_read_consistency = 'global'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.75 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.37 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.66 sec)
Aurora MySQL에서 쓰기 전달을 사용하여 멀티파트 문 실행
DML 문은 INSERT ... SELECT
문 또는 DELETE ... WHERE
문과 같이 여러 부분으로 구성될 수 있습니다. 이 경우 전체 명령문은 기본 클러스터로 전달되어 기본 클러스터에서 실행됩니다.
Aurora MySQL에서 쓰기 전달을 사용한 트랜잭션
트랜잭션이 기본 클러스터로 전달되는지 여부는 트랜잭션의 액세스 모드에 따라 다릅니다. SET TRANSACTION
문 또는 START TRANSACTION
문을 사용하여 트랜잭션에 대한 액세스 모드를 지정할 수 있습니다. transaction_read_only
장기 실행 트랜잭션이 상당한 기간 동안 명령문을 실행하지 않으면 유휴 제한 시간을 초과할 수 있습니다. 이 기간의 기본값은 1분입니다. 이 값을 최대 하루까지 늘릴 수 있습니다. 유휴 시간 제한을 초과하는 트랜잭션은 기본 클러스터에서 취소됩니다. 다음 번 후속 명령문을 제출하면 시간 제한 오류가 수신됩니다. 그런 다음 Aurora는 트랜잭션을 롤백합니다.
이러한 유형의 오류는 쓰기 전달을 사용할 수 없는 다른 경우에 발생할 수 있습니다. 예를 들어 기본 클러스터를 다시 시작하거나 쓰기 전달 구성 설정을 끄면 Aurora에서 쓰기 전달을 사용하는 트랜잭션이 취소됩니다.
Aurora MySQL에서 쓰기 전달에 대한 구성 파라미터
Aurora 클러스터 파라미터 그룹에는 쓰기 전달 기능에 대한 설정이 포함되어 있습니다. 이러한 파라미터는 클러스터 파라미터이므로 각 클러스터의 모든 DB 인스턴스에 이러한 변수의 동일한 값이 있어야 합니다. 이러한 파라미터에 대한 자세한 내용은 다음 표에 요약되어 있으며, 표 뒤에 사용 참고 사항이 나와 있습니다.
이름 | 범위 | 유형 | 기본값 | 유효값 |
---|---|---|---|---|
aurora_fwd_master_idle_timeout (Aurora MySQL 버전 2) |
전 세계 | 부호 없는 정수 | 60 | 1–86,400 |
aurora_fwd_master_max_connections_pct (Aurora MySQL 버전 2) |
전 세계 | 부호 없는 긴 정수 | 10 | 0–90 |
aurora_fwd_writer_idle_timeout (Aurora MySQL 버전 3) |
전 세계 | 부호 없는 정수 | 60 | 1–86,400 |
aurora_fwd_writer_max_connections_pct (Aurora MySQL 버전 3) |
전 세계 | 부호 없는 긴 정수 | 10 | 0–90 |
aurora_replica_read_consistency |
세션 | 열거형 | ''(Null) | EVENTUAL , SESSION , GLOBAL |
보조 클러스터에서 들어오는 쓰기 요청을 제어하려면 기본 클러스터에서 다음과 같은 설정을 사용합니다.
-
aurora_fwd_master_idle_timeout
,aurora_fwd_writer_idle_timeout
: 기본 클러스터가 보조 클러스터에서 전달된 연결에 대한 활동을 닫기 전에 대기하는 시간(초)입니다. 세션이 이 기간 동안 유휴 상태로 유지되면 Aurora에서 세션이 취소됩니다. -
aurora_fwd_master_max_connections_pct
,aurora_fwd_writer_max_connections_pct
: 리더에서 전달된 쿼리를 처리하기 위해 라이터 DB 인스턴스에서 사용할 수 있는 데이터베이스 연결의 상한입니다. 이 값은 기본 클러스터의 라이터 DB 인스턴스에 대한max_connections
설정의 백분율로 표시됩니다. 예를 들어max_connections
가 800이고aurora_fwd_master_max_connections_pct
또는aurora_fwd_writer_max_connections_pct
가 10이면 라이터는 최대 80개의 동시 전달 세션을 허용합니다. 이러한 연결은max_connections
설정을 통해 관리되는 동일한 연결 풀에서 발생합니다.하나 이상의 보조 클러스터에 쓰기 전달이 활성화된 경우 이 설정은 기본 클러스터에만 적용됩니다. 값을 줄이면 기존 연결은 영향을 받지 않습니다. Aurora는 보조 클러스터에서 새 연결을 생성하려고 할 때 설정의 새 값을 고려합니다. 기본값은
max_connections
값의 10% 를 나타내는 10입니다. 보조 클러스터에서 쿼리 전달을 활성화하는 경우 보조 클러스터의 쓰기 작업이 성공하려면 이 설정에 0이 아닌 값이 있어야 합니다. 값이 0이면 쓰기 작업은ER_CON_COUNT_ERROR
메시지와 함께 오류 코드Not enough connections on writer to handle your request
를 수신합니다.
aurora_replica_read_consistency
파라미터는 쓰기 전달을 활성화하는 세션 수준 파라미터입니다. 이는 각 세션에서 사용합니다. 읽기 일관성 수준에 대해 EVENTUAL
, SESSION
또는 GLOBAL
을(를) 지정할 수 있습니다. 일관성 수준에 대한 자세한 내용은 Aurora MySQL에서 쓰기 전달의 격리 및 일관성 단원을 참조하세요. 이 파라미터에는 다음과 같은 규칙이 적용됩니다.
-
이 파라미터는 세션 수준 파라미터입니다. 기본값은 ''(비어 있음)입니다.
-
aurora_replica_read_consistency
가EVENTUAL
또는SESSION
또는GLOBAL
로 설정된 경우에만 세션에서 쓰기 전달을 사용할 수 있습니다. 이 파라미터는 쓰기 전달이 활성화되어 있고 Aurora 글로벌 데이터베이스에 있는 보조 클러스터의 리더 인스턴스에만 적용됩니다. -
다중 선언문 트랜잭션 내에서 이 변수를 설정하거나 (비어있는 경우) 설정 해제 (이미 설정된 경우) 할 수 없습니다. 그러나 이러한 트랜잭션 중에 하나의 유효한 값 (
EVENTUAL
,SESSION
, 또는GLOBAL
) 에서 다른 유효한 값 (EVENTUAL
,SESSION
, 또는GLOBAL
) 으로 변경할 수 있습니다. -
보조 클러스터에서 쓰기 전달이 활성화되지 않은 경우 이 변수는
SET
일 수 없습니다. -
기본 클러스터에서 세션 변수를 설정해도 전혀 효과가 없습니다. 기본 클러스터에서 이 변수를 수정하려고 하면 오류가 수신됩니다.
Aurora MySQL에서 쓰기 전달에 대한 Amazon CloudWatch 지표
다음 Amazon CloudWatch 지표 및 Aurora MySQL 상태 변수는 하나 이상의 보조 클러스터에서 쓰기 전달을 사용할 때 기본 클러스터에 적용됩니다. 이러한 지표는 모두 기본 클러스터의 라이터 DB 인스턴스에서 측정됩니다.
CloudWatch 지표 | Aurora MySQL 상태 변수 | 단위 | 설명 |
---|---|---|---|
|
– | 개수 |
라이터 DB 인스턴스에서 세션이 꽉 차서 거부되는 전달된 쿼리 수입니다. Aurora MySQL 버전 2용 |
|
– | 개수 |
라이터 DB 인스턴스에서 세션이 꽉 차서 거부되는 전달된 쿼리 수입니다. Aurora MySQL 버전 3용. |
|
– | 밀리초 |
라이터 DB 인스턴스에서 전달된 각 DML 문을 처리하는 평균 시간입니다. 보조 클러스터가 쓰기 요청을 전달하는 시간이나 변경 사항을 보조 클러스터에 다시 복제하는 시간은 포함되지 않습니다. Aurora MySQL 버전 2용 |
|
– | 초당 개수 |
이 라이터 DB 인스턴스에서 초당 처리되는 전달된 DML 문 수입니다. Aurora MySQL 버전 2용 |
|
Aurora_fwd_master_open_sessions |
개수 |
라이터 DB 인스턴스에 있는 전달된 세션 수입니다. Aurora MySQL 버전 2용 |
– |
Aurora_fwd_master_dml_stmt_count |
개수 | 이 라이터 DB 인스턴스로 전달된 총 DML 문 수입니다. Aurora MySQL 버전 2용 |
– |
Aurora_fwd_master_dml_stmt_duration |
마이크로초 |
이 라이터 DB 인스턴스로 전달된 DML 문의 총 기간입니다. Aurora MySQL 버전 2용 |
– |
Aurora_fwd_master_select_stmt_count |
개수 |
이 라이터 DB 인스턴스로 전달된 총 Aurora MySQL 버전 2용 |
– |
Aurora_fwd_master_select_stmt_duration |
마이크로초 |
이 라이터 DB 인스턴스로 전달된 Aurora MySQL 버전 2용 |
|
– | 밀리초 |
라이터 DB 인스턴스에서 전달된 각 DML 문을 처리하는 평균 시간입니다. 보조 클러스터가 쓰기 요청을 전달하는 시간이나 변경 사항을 보조 클러스터에 다시 복제하는 시간은 포함되지 않습니다. Aurora MySQL 버전 3용. |
|
– | 초당 개수 | 이 라이터 DB 인스턴스에서 초당 처리되는 전달된 DML 문 수입니다. Aurora MySQL 버전 3용. |
|
Aurora_fwd_writer_open_sessions |
개수 | 라이터 DB 인스턴스에 있는 전달된 세션 수입니다. Aurora MySQL 버전 3용. |
– |
Aurora_fwd_writer_dml_stmt_count |
개수 | 이 라이터 DB 인스턴스로 전달된 총 DML 문 수입니다. Aurora MySQL 버전 3용. |
– |
Aurora_fwd_writer_dml_stmt_duration |
마이크로초 | 이 라이터 DB 인스턴스로 전달된 DML 문의 총 기간입니다. |
– |
Aurora_fwd_writer_select_stmt_count |
개수 | 이 라이터 DB 인스턴스로 전달된 총 |
– |
Aurora_fwd_writer_select_stmt_duration |
마이크로초 |
이 라이터 DB 인스턴스로 전달된 Aurora MySQL 버전 3용. |
다음 CloudWatch 지표 및 Aurora MySQL 상태 변수는 각 보조 클러스터에 적용됩니다. 이러한 지표는 쓰기 전달이 활성화된 보조 클러스터의 각 리더 DB 인스턴스에서 측정됩니다.
CloudWatch 지표 | Aurora MySQL 상태 변수 | 단위 | 설명 |
---|---|---|---|
|
– | 밀리초 | 복제본에 있는 전달된 DML의 평균 응답 시간입니다. |
|
– | 초당 개수 | 초당 처리되는 전달된 DML 문 수입니다. |
|
Aurora_fwd_replica_open_sessions |
개수 | 리더 DB 인스턴스에서 쓰기 전달을 사용하는 세션 수입니다. |
|
– | 밀리초 |
리더 DB 인스턴스의 리더 DB 인스턴스가 쿼리를 처리하기 전에 대기하는 정도는 |
|
– | 초당 개수 | 쓰기를 전달하는 모든 세션에서 초당 처리되는 SELECT 문의 총 수입니다. |
|
(–) | 밀리초 | 전달된 SELECT 지연 시간, 모니터링 기간 내에 전달된 모든 SELECT 명령문의 평균입니다. |
|
– | 초당 개수 | 모니터링 기간 내 전달된 SELECT 초당 평균 처리량입니다. |
– |
Aurora_fwd_replica_dml_stmt_count |
개수 | 이 리더 DB 인스턴스에서 전달된 총 DML 문 수입니다. |
– |
Aurora_fwd_replica_dml_stmt_duration |
마이크로초 | 이 리더 DB 인스턴스에서 전달된 모든 DML 문의 총 기간입니다. |
– |
Aurora_fwd_replica_errors_session_limit |
개수 |
다음 오류 조건 중 하나로 인해 기본 클러스터에서 거부한 세션 수입니다.
|
– |
Aurora_fwd_replica_read_wait_count |
개수 | 이 리더 DB 인스턴스에서 총 쓰기 후 읽기 대기 횟수입니다. |
– |
Aurora_fwd_replica_read_wait_duration |
마이크로초 | 이 리더 DB 인스턴스의 읽기 일관성 설정으로 인한 총 대기 기간입니다. |
– |
Aurora_fwd_replica_select_stmt_count |
개수 | 이 리더 DB 인스턴스에서 전달된 총 SELECT 문 수입니다. |
– |
Aurora_fwd_replica_select_stmt_duration |
마이크로초 | 이 리더 DB 인스턴스에서 전달된 SELECT 문의 총 기간입니다. |