Amazon Aurora MySQL에서 “Waiting for the slave SQL thread to free enough relay log space(슬레이브 SQL 스레드가 충분한 릴레이 로그 공간을 확보하기를 기다리는 중)” 오류 문제를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Aurora MySQL에서 이진 로그 복제의 복제본으로 작동하는 SHOW SLAVE STATUS 명령 출력에서다음 오류가 발생했습니다. "Waiting for the slave SQL thread to free enough relay log space(슬레이브 SQL 스레드가 충분한 릴레이 로그 공간을 확보하기를 기다리는 중)" 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

Aurora MySQL이 이진 로그 복제의 복제본인 경우 MySQL과 동일한 방식으로 I/O 스레드와 SQL 스레드를 실행합니다. I/O 스레드는 기본 로그에서 이진 로그를 읽은 다음 복제본 DB 인스턴스에 릴레이 로그로 저장합니다. SQL 스레드는 릴레이 로그의 이벤트를 처리하고 릴레이 로그의 이벤트가 처리될 때 릴레이 로그를 삭제합니다.

SQL 스레드의 이벤트 처리 속도가 릴레이 로그 생성 속도보다 느릴 경우 릴레이 로그의 양이 증가합니다.

전역 변수 relay_log_space_limit0보다 크게 설정되고 모든 릴레이 로그의 총 크기가 한도에 도달하면 새 릴레이 로그가 저장되지 않습니다. 릴레이 로그 공간이 사용 가능 상태로 다시 바뀔 때까지 SHOW SLAVE STATUS 출력에는 SLAVE_IO_State 필드에 “Waiting for the slave SQL thread to free enough relay log space(슬레이브 SQL 스레드가 충분한 릴레이 로그 공간을 확보하기를 기다리는 중)”이라는 메시지가 표시됩니다.

Aurora MySQL에서 relay_log_space_limit는 1,000,000,000(953.6MiB)으로 설정되며 수정할 수 없습니다. 이렇게 하면 클러스터 볼륨이 불필요하게 커지지 않습니다. 모든 릴레이 로그의 총 크기가 1,000,000,000바이트(953.6MiB) 에 도달하면 I/O 스레드가 릴레이 로그 저장을 중지합니다. SQL 스레드가 이벤트를 처리하고 기존 로그를 삭제할 때까지 기다립니다. 그런 다음 Slave_IO_state는 “Waiting for the slave SQL thread to free enough relay log space(슬레이브 SQL 스레드가 충분한 릴레이 로그 공간을 확보하기를 기다리는 중)”이라는 메시지를 표시합니다. SQL 스레드가 중지되지 않으면 릴레이 로그가 결국 삭제되고 I/O 스레드가 새 릴레이 로그 저장을 다시 시작합니다.

또한 SQL이 I/O 스레드가 릴레이 로그를 생성하는 만큼 빠르지 않기 때문에 복제 지연이 발생할 수 있습니다. relay_log_space_limit 값을 더 큰 값으로 수정하더라도 릴레이 로그는 계속 누적되며 SQL 스레드 처리 속도가 릴레이 로그 생성 속도를 따라잡을 때까지 이 문제는 해결되지 않습니다.

SHOW SLAVE STATUS 명령 출력에서 현재 릴레이 로그 공간, I/O 스레드 상태 및 SQL 스레드의 상태를 볼 수 있습니다.

Slave_IO_State: Waiting for the slave SQL thread to free enough relay log space
Master_Log_File: mysql-bin-changelog.237029
Read_Master_Log_Pos: 55356151
Relay_Master_Log_File: mysql-bin-changelog.237023
Exec_Master_Log_Pos: 120
Relay_Log_Space: 1000002403

Master_Log_FileRead_Master_Log_Pos는 이진 로그 파일 이름과 I/O 스레드가 읽기 및 저장을 완료한 위치를 표시합니다. Relay_Master_Log_FileExec_Master_Log_Pos는 이진 로그 파일 이름과 SQL 스레드가 처리 중인 위치를 표시합니다. SQL 스레드가 실제로 읽는 것은 릴레이 로그이지만 기본 DB 인스턴스와 위치에 해당하는 이진 로그 파일 이름이 표시됩니다.

Master_Log_FileRelay_Master_Log_File과 다른 경우 SQL 스레드 속도가 충분히 빠르지 않다는 것을 의미합니다. Master_Log_FileRelay_Master_Log_File이 동일한 경우 I/O 스레드가 지연에 기여할 수 있습니다.

다음 요인으로 인해 SQL 스레드의 성능이 저하될 수 있습니다.

  • 기본 DB 인스턴스에 대한 장기 실행 쿼리
  • DB 인스턴스 클래스 크기 또는 스토리지 부족
  • 기본 DB 인스턴스에서 수행된 병렬 쿼리
  • 복제본 DB 인스턴스의 디스크에 동기화된 이진 로그
  • 복제본 DB 인스턴스의 Binlog_format을 ROW로 설정

이러한 문제 해결 방법에 대한 자세한 내용은 Amazon RDS for MySQL의 긴 복제본 지연 문제를 해결하려면 어떻게 해야 합니까를 참조하세요.

또한 다음 요소는 SQL 스레드의 성능에 영향을 줄 수 있습니다.

  • 복제본 DB 인스턴스의 매우 긴 Transaction History List Length(HLL)
  • 복제본 DB 인스턴스에서 효율성이 떨어지는 I/O 작업
  • 복제본 DB 인스턴스에 보조 인덱스가 많은 테이블

해결 방법

복제본에 쓰기가 발생하는 경우 릴레이 로그 공간을 걱정할 필요가 없습니다. Enhanced Monitoring의 쓰기 처리량 지표를 사용하여 이를 모니터링할 수 있습니다.

대신 복제본의 성능 문제 해결에 중점을 둡니다. 자세한 내용은 Amazon RDS for MySQL의 긴 복제본 지연 문제를 해결하려면 어떻게 해야 합니까Amazon Aurora 읽기 전용 복제본이 뒤쳐져 다시 시작된 이유는 무엇입니까?를 참조하세요.


관련 정보

복제본 서버 옵션 및 변수에 대한 MySQL 설명서

AWS 공식
AWS 공식업데이트됨 3년 전