Aurora MySQL의 이진수 로그 복제 최적화
다음으로 Aurora MySQL에서 이진 로그 복제 성능을 최적화하고 관련 문제를 해결하는 방법을 배울 수 있습니다.
작은 정보
이 논의에서는 MySQL 이진 로그 복제 메커니즘과 작동 방식에 대해 잘 알고 있다고 가정합니다. 배경 정보는 MySQL 설명서의 복제 구현
다중 스레드 이진 로그 복제
다중 스레드 이진 로그 복제를 사용하면 SQL 스레드가 릴레이 로그에서 이벤트를 읽고 SQL 작업자 스레드에서 적용하도록 이벤트를 대기열에 넣습니다. SQL 작업자 스레드는 코디네이터 스레드에서 관리합니다. 가능한 경우 이진 로그 이벤트가 병렬로 적용됩니다.
다중 스레드 이진 로그 복제는 Aurora MySQL 버전 3, Aurora MySQL 버전 2.12.1 이상에서 지원됩니다.
Aurora MySQL DB 인스턴스가 binlog 복제를 사용하도록 구성된 경우 복제본 인스턴스는 Aurora MySQL 3.04 미만 버전에 기본적으로 단일 스레드 복제를 사용합니다. 다중 스레드 복제를 사용 설정하려면 replica_parallel_workers
파라미터를 사용자 정의 파라미터 그룹에서 0보다 큰 값으로 업데이트합니다.
Aurora MySQL 버전 3.04 이상에서는 복제가 기본적으로 다중 스레드로 설정되며 replica_parallel_workers
가 4
로 설정됩니다. 사용자 지정 파라미터 그룹에서 이 파라미터를 수정할 수 있습니다.
다음 구성 옵션을 사용하면 다중 스레드 복제를 세부 조정할 수 있습니다. 사용 정보는 MySQL 참조 설명서의 복제, 이진 로깅 옵션 및 변수
최적의 구성은 여러 요인에 따라 달라집니다. 예를 들어 이진 로그 복제의 성능은 데이터베이스 워크로드 특성과 복제본이 실행 중인 DB 인스턴스 클래스의 영향을 받습니다. 따라서 프로덕션 인스턴스에 새 파라미터 설정을 적용하기 전에 이러한 구성 파라미터에 대한 모든 변경 사항을 철저히 테스트하는 것이 좋습니다.
-
binlog_group_commit_sync_delay
-
binlog_group_commit_sync_no_delay_count
-
binlog_transaction_dependency_history_size
-
binlog_transaction_dependency_tracking
-
replica_preserve_commit_order
-
replica_parallel_type
-
replica_parallel_workers
Aurora MySQL 버전 3.06 이상에서는 보조 인덱스가 두 개 이상인 대규모 테이블의 트랜잭션을 복제할 때 binlog 복제본의 성능을 개선할 수 있습니다. 이 기능은 binlog 복제본에서 보조 인덱스 변경 사항을 병렬로 적용하는 스레드 풀을 도입합니다. 이 기능은 보조 인덱스 변경 사항을 적용하는 데 사용할 수 있는 총 병렬 스레드 수를 제어하는 aurora_binlog_replication_sec_index_parallel_workers
DB 클러스터 파라미터에 의해 제어됩니다. 기본적으로 파라미터는 0
(비활성화됨)로 설정됩니다. 이 기능을 활성화해도 인스턴스를 다시 시작할 필요가 없습니다. 이 기능을 활성화하려면 진행 중인 복제를 중지하고 원하는 수의 병렬 작업자 스레드를 설정한 다음 복제를 다시 시작하세요.
이 파라미터를 글로벌 변수로 사용할 수도 있습니다. 여기서 n
은 병렬 작업자 스레드 수입니다.
SET global aurora_binlog_replication_sec_index_parallel_workers=
n
;
binlog 복제 최적화(Aurora MySQL 2.10 이상)
Aurora MySQL 2.10 이상에서 Aurora는 binlog I/O 캐시라는 최적화를 바이너리 로그 복제에 자동으로 적용합니다. 이 최적화는 가장 최근에 커밋된 binlog 이벤트를 캐싱하여 binlog 덤프 스레드 성능을 개선하고 binlog 소스 인스턴스에 대한 포그라운드 트랜잭션에 미치는 영향을 제한하도록 설계되었습니다.
참고
이 기능에 사용되는 메모리는 MySQL binlog_cache
설정과 독립적입니다.
이 기능은 db.t2
및 db.t3
인스턴스 클래스를 사용하는 Aurora DB 인스턴스에는 적용되지 않습니다.
이 최적화를 켜기 위해 구성 파라미터를 조정할 필요가 없습니다. 특히 이전 Aurora MySQL 버전에서 구성 파라미터 aurora_binlog_replication_max_yield_seconds
를 0이 아닌 값으로 조정하는 경우 Aurora MySQL 2.10 이상에서는 0으로 다시 설정해야 합니다.
상태 변수 aurora_binlog_io_cache_reads
및 aurora_binlog_io_cache_read_requests
는 Aurora MySQL 2.10 이상에서 사용할 수 있습니다. 이러한 상태 변수는 binlog I/O 캐시의 데이터를 읽는 빈도를 모니터링하는 데 도움이 됩니다.
-
aurora_binlog_io_cache_read_requests
는 캐시의 binlog I/O 읽기 요청 수를 보여줍니다. -
aurora_binlog_io_cache_reads
는 캐시의 정보를 검색하는 binlog I/O 읽기 수를 보여줍니다.
다음 SQL 쿼리는 캐시된 정보를 활용하는 binlog 읽기 요청의 백분율을 계산합니다. 이 경우 비율이 100에 가까울수록 더 좋습니다.
mysql> SELECT (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aurora_binlog_io_cache_reads') / (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aurora_binlog_io_cache_read_requests') * 100 as binlog_io_cache_hit_ratio; +---------------------------+ | binlog_io_cache_hit_ratio | +---------------------------+ | 99.99847949080622 | +---------------------------+
binlog I/O 캐시 기능에는 binlog 덤프 스레드와 관련된 새로운 지표도 포함됩니다. 덤프 스레드는 새로운 binlog 복제본이 binlog 소스 인스턴스에 연결될 때 생성되는 스레드입니다.
덤프 스레드 지표는 60초 간격으로 접두사 [Dump thread
metrics]
를 사용하여 데이터베이스 로그에 인쇄됩니다. 지표에는 Secondary_id
, Secondary_uuid
, binlog 파일 이름 및 각 복제본에서 읽는 중인 위치와 같은 각 binlog 복제본에 대한 정보가 포함됩니다. 지표에는 복제 소스와 복제본 간의 거리(바이트)를 나타내는 Bytes_behind_primary
도 포함됩니다. 이 지표는 복제본 I/O 스레드의 지연을 측정합니다. 이 수치는 binlog 복제본에서 seconds_behind_master
지표로 표시되는 복제본 SQL 적용자 스레드의 지연과 다릅니다. 이 거리의 감소 또는 증가를 확인하여 binlog 복제본이 소스를 따라 잡고 있는지, 뒤쳐지지 않는지 확인할 수 있습니다.
binlog 복제 최적화(Aurora MySQL 2~2.09)
Aurora MySQL에 대한 이진 로그 복제를 최적화하려면 다음 클러스터 수준 최적화 매개 변수를 조정합니다. 이러한 파라미터는 binlog 원본 인스턴스의 지연 시간과 복제 지연 사이의 적절한 균형을 지정하는 데 도움이 됩니다.
-
aurora_binlog_use_large_read_buffer
-
aurora_binlog_read_buffer_size
-
aurora_binlog_replication_max_yield_seconds
참고
MySQL 5.7 호환 클러스터의 경우 Aurora MySQL 버전 2부터 2.09.*까지 이러한 파라미터를 사용할 수 있습니다. Aurora MySQL 2.10.0 이상에서는 이러한 파라미터가 binlog I/O 캐시 최적화로 대체되므로 사용할 필요가 없습니다.
대용량 읽기 버퍼 및 최대 수율 최적화 개요
클러스터가 많은 수의 트랜잭션을 처리하는 동안 이진 로그 덤프 스레드가 Aurora 클러스터 볼륨에 액세스할 때 이진 로그 복제 성능이 저하될 수 있습니다. 파라미터 aurora_binlog_use_large_read_buffer
, aurora_binlog_replication_max_yield_seconds
, 및 aurora_binlog_read_buffer_size
를 사용하여 이러한 유형의 문제를 최소화할 수 있습니다.
aurora_binlog_replication_max_yield_seconds
가 0보다 큰 값으로 설정되고 덤프 스레드의 현재 binlog 파일이 활성 상태인 상황을 가정해 보겠습니다. 이 경우 기존 binlog 파일을 트랜잭션으로 채울 때까지 이진 로그 덤프 스레드가 지정한 시간(초)까지 대기합니다. 이 대기 기간은 각 binlog 이벤트를 개별적으로 복제하여 발생할 수 있는 문제를 방지합니다. 그러나 이러면 이진 로그 복제본에 대한 복제 지연이 증가합니다. 이러한 복제본은 aurora_binlog_replication_max_yield_seconds
설정과 동일한 시간(초)만큼 소스의 뒤떨어질 수 있습니다.
현재 binlog 파일은 덤프 스레드가 복제를 수행하기 위해 현재 읽고 있는 binlog 파일을 의미합니다. binlog 파일이 업데이트되거나 들어오는 트랜잭션에 의해 업데이트되도록 열려 있을 때 binlog 파일이 활성 상태인 것으로 간주됩니다. Aurora MySQL이 활성 binlog 파일을 채운 후 MySQL은 새 binlog 파일을 생성하고 전환합니다. 이전 binlog 파일이 비활성 상태가 됩니다. 더 이상 들어오는 트랜잭션에 의해 업데이트되지 않습니다.
참고
이러한 파라미터를 조정하기 전에 시간에 따른 트랜잭션 지연 시간 및 처리량을 측정하십시오. 이진 로그 복제 성능이 안정적이며 가끔 경합이 발생하더라도 대기 시간이 짧다는 것을 알 수 있을 것입니다.
aurora_binlog_use_large_read_buffer
-
이 매개 변수를 1로 설정하면 Aurora MySQL는 파라미터
aurora_binlog_read_buffer_size
및aurora_binlog_replication_max_yield_seconds
의 설정에 따라 이진 로그 복제를 최적화합니다.aurora_binlog_use_large_read_buffer
가 0이면 Aurora MySQL은aurora_binlog_read_buffer_size
및aurora_binlog_replication_max_yield_seconds
파라미터의 값을 무시합니다. aurora_binlog_read_buffer_size
-
더 큰 읽기 버퍼가 있는 이진 로그 덤프 스레드는 각 I/O에 대해 더 많은 이벤트를 읽음으로써 읽기 I/O 작업 수를 최소화합니다. 파라미터
aurora_binlog_read_buffer_size
는 읽기 버퍼 크기를 설정합니다. 대용량 읽기 버퍼는 대량의 binlog 데이터를 생성하는 워크로드에 대한 이진 로그 경합을 줄여줄 수 있습니다.참고
이 파라미터는 클러스터에 설정
aurora_binlog_use_large_read_buffer=1
이 있는 경우에만 영향을 줍니다.읽기 버퍼의 크기를 늘려도 이진 로그 복제 성능에 영향을 주지 않습니다. 이진 로그 덤프 스레드는 읽기 버퍼를 채우기 위해 트랜잭션을 업데이트할 때까지 기다리지 않습니다.
aurora_binlog_replication_max_yield_seconds
-
워크로드에 낮은 트랜잭션 대기 시간이 필요하고 일부 복제 지연을 허용할 수 있는 경우
aurora_binlog_replication_max_yield_seconds
파라미터를 늘릴 수 있습니다. 이 매개 변수는 클러스터에서 이진 로그 복제의 최대 수율 속성을 제어합니다.참고
이 파라미터는 클러스터에 설정
aurora_binlog_use_large_read_buffer=1
이 있는 경우에만 영향을 줍니다.
Aurora MySQL 는 aurora_binlog_replication_max_yield_seconds
파라미터 값에 대한 모든 변경 사항을 즉시 인식합니다. DB 인스턴스를 다시 시작할 필요가 없습니다. 그러나 이 설정을 설정하면 현재 binlog 파일이 최대 크기인 128MB에 도달하고 새 파일로 회전될 때에 한하여 덤프 스레드가 생성되기 시작합니다.
관련 파라미터
binlog 최적화를 활성화하려면 다음 DB 클러스터 파라미터를 사용합니다.
파라미터 | 기본값 | 유효한 값 | 설명 |
---|---|---|---|
aurora_binlog_use_large_read_buffer
|
1 | 0, 1 | 복제 개선 기능을 켜기 위한 스위치. 값이 1이면 바이너리 로그 덤프 스레드는 바이너리 로그 복제에 aurora_binlog_read_buffer_size 를 사용합니다. 그렇지 않으면 기본 버퍼 크기(8K)가 사용됩니다. Aurora MySQL 버전 3에서 사용되지 않습니다. |
aurora_binlog_read_buffer_size
|
5242880 | 8192-536870912 | 파라미터 aurora_binlog_use_large_read_buffer 가 1로 설정된 경우 이진 로그 덤프 스레드가 사용하는 버퍼 크기를 읽습니다. Aurora MySQL 버전 3에서 사용되지 않습니다. |
aurora_binlog_replication_max_yield_seconds
|
0 | 0-36000 |
Aurora MySQL 버전 2.07*에서 허용되는 최댓값은 45입니다. 2.09 및 그 이후 버전에서 더 높은 값으로 조정할 수 있습니다. 버전 2의 경우 이 파라미터는 파라미터 |
이진 로그 복제 최대 수율 메커니즘 사용 설정
다음과 같이 이진 로그 복제 최대 수율 최적화를 시작할 수 있습니다. 이렇게 하면 binlog 원본 인스턴스에서 트랜잭션에 대한 지연 시간이 최소화됩니다. 그러나 더 높은 복제 지연이 발생할 수 있습니다.
Aurora MySQL 클러스터에 대해 최대 수율 binlog 최적화를 설정하려면
-
다음 파라미터 설정을 사용해 DB 클러스터 파라미터 그룹을 생성 또는 편집합니다.
-
aurora_binlog_use_large_read_buffer
:ON
또는 1의 값으로 켭니다. -
aurora_binlog_replication_max_yield_seconds
: 0보다 큰 값을 입력합니다.
-
-
DB 클러스터 파라미터 그룹을 binlog 소스로 작동하는 Aurora MySQL 클러스터와 연결합니다. 이 작업을 수행하려면 Amazon Aurora의 파라미터 그룹의 절차를 따르십시오.
-
파라미터 변경 사항이 적용되는지 확인합니다. 이렇게 하기 위해 binlog 원본 인스턴스에서 다음 쿼리를 실행하십시오.
SELECT @@aurora_binlog_use_large_read_buffer, @@aurora_binlog_replication_max_yield_seconds;
다음과 유사하게 출력되어야 합니다.
+---------------------------------------+-----------------------------------------------+ | @@aurora_binlog_use_large_read_buffer | @@aurora_binlog_replication_max_yield_seconds | +---------------------------------------+-----------------------------------------------+ | 1 | 45 | +---------------------------------------+-----------------------------------------------+
이진 로그 복제 최대 수율 최적화 해제
다음과 같이 이진 로그 복제 최대 수율 최적화를 해제할 수 있습니다. 이렇게 하면 복제 지연이 최소화됩니다. 그러나 binlog 원본 인스턴스의 트랜잭션에 대한 지연 시간이 더 길어질 수 있습니다.
Aurora MySQL 클러스터에 대한 최대 수율 최적화를 해제하는 방법
-
Aurora MySQL 클러스터와 연결된 DB 클러스터 파라미터 그룹에서
aurora_binlog_replication_max_yield_seconds
가 0으로 설정되어 있는지 확인합니다. 파라미터 그룹을 사용한 구성 파라미터 설정에 대한 자세한 내용은 Amazon Aurora의 파라미터 그룹 단원을 참조하십시오. -
파라미터 변경 사항이 적용되는지 확인합니다. 이렇게 하기 위해 binlog 원본 인스턴스에서 다음 쿼리를 실행하십시오.
SELECT @@aurora_binlog_replication_max_yield_seconds;
다음과 유사하게 출력되어야 합니다.
+-----------------------------------------------+ | @@aurora_binlog_replication_max_yield_seconds | +-----------------------------------------------+ | 0 | +-----------------------------------------------+
대량 읽기 버퍼 해제
다음과 같이 전체 대량 읽기 버퍼 기능을 해제할 수 있습니다.
Aurora MySQL 클러스터에 대한 큰 이진 로그 읽기 버퍼를 해제하려면
-
aurora_binlog_use_large_read_buffer
를OFF
또는 0으로 재설정합니다.Aurora MySQL 클러스터와 연결된 DB 클러스터 파라미터 그룹에서
aurora_binlog_use_large_read_buffer
가 0으로 설정되어 있는지 확인합니다. 파라미터 그룹을 사용한 구성 파라미터 설정에 대한 자세한 내용은 Amazon Aurora의 파라미터 그룹 단원을 참조하십시오. -
binlog 원본 인스턴스에서 다음 쿼리를 실행합니다.
SELECT @@ aurora_binlog_use_large_read_buffer;
다음과 유사하게 출력되어야 합니다.
+---------------------------------------+ | @@aurora_binlog_use_large_read_buffer | +---------------------------------------+ | 0 | +---------------------------------------+