Q. 


현재 MariaDB 인스턴스에 읽기 전용 복제본을 사용하고 있는데,

지연 시간이 계속해서 늘어나고 있습니다. 원인 및 해결 방법은 무엇인가요?




A.


MySQL, MariaDB 복제는 기본적으로 비동기 방식의 복제 매커니즘입니다.


원본 DB 인스턴스에서는 대량의 쓰기 작업이 병렬적으로 발생하고 있지만,

읽기 전용 복제본에 대한 쓰기 작업은 단일 스레드를 사용하여 직렬화되기 때문에 원본 인스턴스와 읽기 전용 복제본 사이에 지연 시간이 발생합니다.




복제 지연 원인에는 다음과 같은 내용들이 있습니다. 

  1. Long Query 
  2. Write 쿼리량 증가 (데이터 사이즈 증가)
  3. Lock 이슈
  4. 하드웨어 이슈
  5. 슬레이브 로드 증가
  6. 데이터 불일치




지연 시간을 줄일 수 있는 방법에는 여러가지가 있습니다.

  • 읽기 전용 복제본의 DB 인스턴스 클래스를 원본 DB 인스턴스와 비슷한 스토리지 크기로 설정합니다.
  • 원본 DB 인스턴스와 읽기 전용 복제본에 사용되는 DB 파라미터 그룹의 파라미터 설정이 호환되는지 확인합니다.
  • 쿼리 캐시를 비활성화합니다. 

-> 자주 수정되는 테이블의 경우, 쿼리 캐시를 사용하면 캐시가 자주 잠기고(Lock) 새로 고쳐지기 때문에 복제 지연이 늘어날 수 있습니다.

이럴 경우, 쿼리 캐시를 비활성화하면 복제 지연이 줄어드는 효과를 볼 수 있습니다.

DB 파라미터 그룹에서 query_cache_type parameter를 0으로 설정하여 쿼리 캐시를 비활성화할 수 있습니다.

  • InnoDB for MySQL, InnoDB for MariaDB 10.2 이상 또는 XtraDB for MariaDB 10.1 이하의 읽기 전용 복제본에서 버퍼 풀을 warming합니다.

-> 자주 업데이트되는 작은 테이블 집합이 있고 InnoDB 또는 XtraDB 테이블 스키마를 사용하고 있다고 가정합니다.

이 경우, 읽기 전용 복제본에 해당 테이블을 덤프하면 데이터베이스 엔진이 디스크에서 해당 테이블의 행을 전체적으로 검사한 다음 버퍼 풀에 캐시하며, 복제본 지연 시간을 줄일 수 있습니다.


-> Linux, MacOS 또는 Unix의 예시 


PROMPT> mysqldump \

    -h <endpoint> \

    --port=<port> \

    -u=<username> \

    -p <password> \

    database_name table1 table2 > /dev/null


-> Windows의 예시


PROMPT> mysqldump ^

    -h <endpoint> ^

    --port=<port> ^

    -u=<username> ^

    -p <password> ^

    database_name table1 table2 > /dev/null 




참조 링크:

#1 읽기 전용 복제본 간 지연 문제 진단 및 해결 -

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.MySQL.ReplicaLag


#2 MySQL 복제 지연 원인 및 해결 -

https://m.blog.naver.com/PostView.nhn?blogId=sory1008&logNo=221600878238&proxyReferer=https:%2F%2Fwww.google.com%2F




궁금하신 사항이 모두 풀리지 않으셨거나, 

관련하여 문의사항 있으시면 저희 고객지원포털을 통해 문의 남겨주시기 바랍니다.


감사합니다.