Amazon RDS for MySQL DB 인스턴스가 ‘재부팅 중’에서 멈추는 이유는 무엇입니까?

5분 분량
0

Amazon Relational Database Service(Amazon RDS) for MySQL DB 인스턴스를 재시작하려고 합니다. 하지만 DB 인스턴스가 ‘재부팅 중’ 상태에서 멈추거나 재부팅이 예상보다 오래 걸립니다. 왜 이런 현상이 발생하며, 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

재부팅을 수행하기 전에 DB 인스턴스에서 수신 또는 진행 중인 트랜잭션을 모두 중지해야 합니다. 진행 중인 트랜잭션은 중지되고 커밋되지 않은 트랜잭션은 롤백됩니다.

참고: 커밋되지 않은 트랜잭션의 롤백은 비용이 많이 드는 작업일 수 있습니다. 또한 커밋되지 않은 트랜잭션은 Amazon RDS for MySQL 인스턴스를 다시 사용할 수 있게 되기까지 완료하는 데 시간이 오래 걸릴 수 있습니다.

재부팅이 시작된 후에는 프로세스를 취소할 수 없으며 재부팅이 완료될 때까지 재부팅이 계속됩니다. 재부팅이 예상보다 오래 걸리는 경우 근본 원인을 조사하고 다음 문제 해결 방법을 고려하십시오.

  • 진행 중인 쿼리가 있는지 확인합니다.
  • 삭제되지 않은 트랜잭션이 있는지 확인합니다.
  • MySQL 오류 로그 파일을 검토합니다.

해결 방법

진행 중인 쿼리 확인

SHOW FULL PROCESSLIST 명령을 사용하여 Amazon RDS for MySQL 인스턴스에 활성 쿼리가 있는지 확인합니다.

mysql> SHOW FULL PROCESSLIST;

다음은 UPDATE 쿼리가 아직 진행 중임을 나타내는 예제 출력입니다.

+-----+---------------+---------------------+------+---------+------+----------+-----------------------+
| Id  | User          | Host                | db   | Command | Time | State    | Info                  |
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+
|   2 | rdsadmin      | localhost:30662     | NULL | Sleep   |    4 |          | NULL                  |
| 101 | admin         | 172.31.28.252:58288 | NULL | Query   |  111 | updating |UPDATE tutorials SET tu|
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+

출력은 데이터베이스에서 실행 중인 MySQL 스레드에 대한 정보를 제공합니다. 실행 중인 쿼리가 있는 경우 재부팅을 수행하기 전에 쿼리가 완료되도록 합니다.

참고: SHOW FULL PROCESSLIST 쿼리를 마스터 사용자로 실행하세요. 마스터 사용자가 아닌 경우 MySQL 인스턴스의 모든 활성 스레드를 보려면 MySQL 서버 관리 권한이 있어야 합니다. 그렇지 않으면 사용자의 MySQL 계정에 있는 활성 스레드 ID만 출력에 표시됩니다. 자세한 내용은 MySQL 웹 사이트에서 SHOW PROCESSLIST 문MySQL 서버 관리를 참조하세요.

삭제되지 않은 트랜잭션이 있는지 확인

MySQL InnoDB 엔진은 트랜잭션 중에 변경된 행의 이전 버전 목록을 유지 관리하는 MVCC(다중 버전 동시성 제어)를 사용합니다. 트랜잭션을 롤백해야 하는 경우 InnoDB는 이 프로세스 중에 실행 취소 작업을 수행할 수 있습니다. 이전 버전의 행은 실행 취소 공간 내에 캡처됩니다. 이러한 이전 버전은 트랜잭션 중에 더 이상 호출되지 않으면 삭제됩니다. 트랜잭션이 여전히 해당 변경 내용을 참조하기 때문에 캡처된 변경 사항이 제거되지 않으면 히스토리 리스트 길이가 더 길어질 수 있습니다. 자세한 내용은 MySQL 웹 사이트의 InnoDB 다중 버전 관리를 참조하세요.

삭제되지 않은 트랜잭션은 히스토리 리스트 길이 값으로 표시됩니다. 이 값은 SHOW ENGINE INNODB STATUS 명령 출력의 ‘TRANSACTIONS’에서 찾을 수 있습니다. 히스토리 리스트 길이는 일반적으로 작은 값이지만 쓰기가 많은 워크로드 또는 장기 실행 트랜잭션으로 인해 값이 증가할 수 있습니다. 히스토리 리스트 길이 값에 대한 자세한 내용은 MySQL 웹 사이트의 구성 제거를 참조하세요.

히스토리 리스트 길이 내에서 삭제되지 않은 트랜잭션이 있는지 확인하려면 SHOW ENGINE INNODB STATUS 명령을 사용합니다. 이 명령의 출력을 통해 히스토리 리스트 길이의 크기와 ‘TRANSACTIONS’ 섹션 아래에 나열된 진행 중인 트랜잭션의 크기도 볼 수 있습니다. 나열된 트랜잭션 검토에 대한 자세한 내용은 MySQL 웹 사이트의 InnoDB 표준 모니터링 및 잠금 모니터링 출력을 참조하세요.

예를 들면 다음과 같습니다.

------------
TRANSACTIONS
------------
Trx id counter 105746959
Purge done for trx's n:o < 105746958 undo n:o < 0 state: running but idle
History list length 32
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 328605240396520, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 328605240395600, not started
0 lock struct(s), heap size 1136, 0 row lock(s)

참고: 히스토리 리스트 길이가 높은 값이고 활성 트랜잭션이 있는 경우 재부팅하는 것은 좋지 않습니다.

자세한 내용은 MySQL 웹 사이트의 SHOW ENGINE INNODB STATUS를 참조하세요.

MySQL 오류 로그 파일 검토

Amazon RDS에서는 MySQL 오류 로그 파일이 기본적으로 활성화되어 있습니다. RDS 인스턴스를 다시 사용할 수 있게 되기까지 시간이 너무 오래 걸린다고 생각되면 MySQL 오류 로그 파일의 내용을 검토하십시오. MySQL은 시작되거나 종료될 때 또는 오류가 발생할 때 오류 로그 파일에 기록합니다.

예를 들어 InnoDB는 InnoDB 충돌 복구 프로세스의 일부로 커밋되지 않은 트랜잭션을 롤백해야 할 수 있습니다. 커밋되지 않은 트랜잭션이 롤백되면 MySQL 오류 로그에 이 이벤트가 기록됩니다. 자세한 내용은 MySQL 웹 사이트에서 InnoDB 충돌 복구를 참조하세요.

추가 문제 해결

참고: 특정 시점으로 복구(PITR)를 수행하거나 스냅샷에서 복원하도록 선택하면 신규 Amazon RDS 인스턴스를 즉시 사용하지 못할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.

Amazon RDS for MySQL 인스턴스가 잠시 재부팅되는 경우 다음과 같은 추가 문제 해결 팁을 시도해 보십시오.

  • DB 인스턴스에 자동 백업이 활성화된 경우 PITR을 수행하여 지정된 시간부터 신규 Amazon RDS 인스턴스로 복원합니다. 백업 보존 기간 내의 어느 시점으로든 복원할 수 있습니다.
    참고: 기본적으로 복원된 DB 인스턴스는 기본 DB 파라미터 및 옵션 그룹과 연결됩니다. 그러나 복원 중에 사용자 지정 파라미터 그룹과 옵션 그룹을 지정하여 사용할 수 있습니다.
  • 새 DB 인스턴스를 생성하여 가장 최근의 DB 스냅샷에서 DB 인스턴스를 복원합니다. 복원된 DB 인스턴스는 상태가 사용 가능으로 되자마자 사용할 수 있습니다.
  • DB 인스턴스에 읽기 전용 복제본이 있는 경우 읽기 전용 복제본을 승격하여 독립형 DB 인스턴스로 만듭니다. 읽기 전용 복제본을 승격하면 DB 인스턴스가 사용 가능하기 전에 자동으로 재부팅됩니다.

데이터베이스 활동을 정기적으로 모니터링하는 것도 모범 사례입니다. 다음 도구를 사용하여 Amazon RDS for MySQL DB 인스턴스를 모니터링 할 수 있습니다.

  • Amazon CloudWatch: Amazon CloudWatch를 사용하면 진행 중인 모든 데이터베이스 워크로드를 모니터링할 수 있습니다. DB 연결, CPU 사용률 또는 쓰기/읽기 IOPS에서 높은 값이 관찰되는 경우 DB 인스턴스에 지속적인 활동이 있을 수 있습니다.
  • 향상된 모니터링: 향상된 모니터링에서는 OS 지표 정보를 CloudWatch Logs로 전송할 수 있는 권한이 필요합니다. AWS Identity and Access Management(IAM) 역할을 사용하여 향상된 모니터링 권한을 부여할 수 있습니다. 향상된 모니터링을 활성화하기 전에 먼저 IAM 역할을 생성해야 합니다.
  • 성능 개선 도우미: 성능 스키마는 Amazon RDS for MySQL(또는 MariaDB)에서 사용하는 선택적 성능 도구입니다. 성능 개선 도우미를 활성화하거나 비활성화하면 DB 인스턴스를 재부팅할 필요가 없습니다. 또한 가동 중지 시간이나 장애 조치가 발생하지 않습니다.