쓰기 전달을 위한 읽기 일관성
DB 클러스터에서 읽기 일관성 정도를 제어할 수 있습니다. 읽기 일관성 수준은 라이터에서 일부 또는 모든 변경 사항이 복제되도록 각 읽기 작업 전에 DB 클러스터가 대기하는 기간을 결정합니다. 읽기 일관성 수준을 조정하여 세션에서 전달된 모든 쓰기 작업이 후속 쿼리 전에 DB 클러스터에 표시되도록 할 수 있습니다. 또한 이 설정을 사용하여 DB 클러스터의 쿼리에 항상 라이터의 최신 업데이트가 표시되게 할 수 있습니다. 이 설정은 다른 세션이나 다른 클러스터에서 제출한 쿼리에도 적용됩니다. 애플리케이션에 이러한 유형의 동작을 지정하려면 aurora_replica_read_consistency
DB 파라미터 또는 DB 클러스터 파라미터의 값을 선택합니다.
중요
쓰기를 전달하려는 경우 항상 aurora_replica_read_consistency
DB 파라미터 또는 DB 클러스터 파라미터를 설정하세요. 설정하지 않으면 Aurora가 쓰기를 전달하지 않습니다. 이 파라미터는 기본적으로 비어 있으므로, 이 파라미터를 사용할 때 특정 값을 선택하세요. aurora_replica_read_consistency
파라미터는 쓰기 전달이 활성화된 DB 클러스터 또는 인스턴스에만 영향을 미칩니다.
일관성 수준을 높이면 애플리케이션은 변경 사항이 DB 인스턴스 간에 전파될 때까지 더 오랜 시간 동안 대기합니다. 빠른 응답 시간과 쿼리가 실행되기 전에 다른 DB 인스턴스에서 변경한 내용을 완전히 사용할 수 있도록 보장하는 것 사이에서 균형을 선택할 수 있습니다.
aurora_replica_read_consistency
파라미터에 대해 다음 값을 지정할 수 있습니다.
-
EVENTUAL
- 쓰기 작업이 라이터 DB 인스턴스에서 수행될 때까지 동일한 세션에서의 쓰기 작업 결과가 표시되지 않습니다. 쿼리는 업데이트된 결과를 사용할 수 있을 때까지 대기하지 않습니다. 따라서 명령문의 타이밍 및 복제 지연의 양에 따라 이전 데이터 또는 업데이트된 데이터를 검색하게 될 수 있습니다. 이는 쓰기 전달을 사용하지 않는 Aurora MySQL DB 클러스터와 동일한 일관성입니다. -
SESSION
- 쓰기 전달을 사용하는 모든 쿼리에 해당 세션에서 이루어진 모든 변경 결과가 표시합니다. 변경 내용은 트랜잭션이 커밋되었는지 여부와 상관없이 표시됩니다. 필요한 경우 전달된 쓰기 작업의 결과가 복제될 때까지 쿼리가 대기합니다. -
GLOBAL
- DB 클러스터의 모든 세션 및 인스턴스에서 커밋된 모든 변경 사항이 세션에 표시됩니다. 각 쿼리는 세션 지연 양에 따라 다른 기간 동안 대기할 수 있습니다. 쿼리가 시작된 시간을 기준으로, DB 클러스터가 라이터에서 커밋된 모든 데이터로 최신 상태가 되면 쿼리가 진행됩니다.
쓰기 전달과 관련된 파라미터에 대한 자세한 내용은 쓰기 전달에 대한 구성 파라미터 섹션을 참조하세요.
참고
aurora_replica_read_consistency
를 세션 변수로 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
mysql> set aurora_replica_read_consistency = 'session';
쓰기 전달 사용의 예제
다음 예시에서는 INSERT
명령문 다음에 SELECT
명령문을 실행하는 aurora_replica_read_consistency
파라미터의 효과를 보여줍니다. aurora_replica_read_consistency
의 값과 명령문의 타이밍에 따라 결과가 다를 수 있습니다.
일관성을 높이기 위해 SELECT
문을 실행하기 전에 잠시 기다립니다. 또는 Aurora은(는) SELECT
을(를) 계속하기 전에 결과 복제가 완료될 때까지 자동으로 대기할 수 있습니다.
DB 파라미터 설정에 대한 자세한 내용은 Amazon Aurora의 파라미터 그룹 섹션을 참조하세요.
예 aurora_replica_read_consistency
를 EVENTUAL
로 설정
INSERT
명령문을 실행한 직후에 SELECT
명령문을 실행하면 새 행이 삽입되기 전의 행 수로 COUNT(*)
값이 반환됩니다. 잠시 후에 SELECT
를 다시 실행하면 업데이트된 행 수가 반환됩니다. SELECT
명령문은 대기하지 않습니다.
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)
예 aurora_replica_read_consistency
를 SESSION
으로 설정
SELECT
명령문 직후 INSERT
를 실행하면 INSERT
명령문으로 인한 변경 사항이 표시될 때까지 대기합니다. 후속 SELECT
명령문은 대기하지 않습니다.
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)
예 aurora_replica_read_consistency
를 GLOBAL
로 설정
각 SELECT
명령문은 쿼리를 수행하기 전에 명령문의 시작 시간을 기준으로 모든 데이터 변경 사항이 표시되도록 대기합니다. 각 SELECT
명령문의 대기 시간은 복제 지연의 양에 따라 달라집니다.
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)