SQL Server용 RDS 인스턴스가 재부팅 상태에서 멈추는 이유는 무엇입니까?

최종 업데이트 날짜: 2022년 9월 27일

Microsoft SQL Server 인스턴스용 Amazon Relational Database Service(RDS) 를 재부팅하는 데 시간이 오래 걸리는 이유는 무엇입니까?

간략한 설명

인스턴스에서 진행 중인 트랜잭션이 많은 경우 DB 인스턴스를 재부팅하는 데 예상보다 시간이 더 걸릴 수 있습니다. 또는 인스턴스에 많은 수의 가상 로그 파일(VLF)이 있어 재부팅 속도가 느려지는 경우 재부팅이 중단된 것처럼 보일 수 있습니다.

이러한 문제를 해결하려면 다음 중 하나 또는 모두를 수행합니다.

  • DB 인스턴스에서 진행 중인 쿼리를 확인합니다.
  • DB 인스턴스의 VLF 수를 줄입니다.

해결 방법

DB 인스턴스에서 진행 중인 쿼리를 확인합니다.

재부팅하면 진행 중인 모든 트랜잭션이 중지되고 SQL Server는 인스턴스를 시작하는 동안 복구를 실행합니다. SQL Server는 트랜잭션의 롤포워드 및 롤백을 수행하여 데이터베이스를 일관된 상태로 만듭니다.

SQL Server 오류 로그에서 이 복구 프로세스에 소요된 시간을 확인할 수 있습니다. 로그 항목에는 각 복구 단계에서 소요된 시간이 포함됩니다. 다음 로그 항목 예에서 X는 SQL Server가 각 단계 및 전체 복구에 걸린 시간입니다. 진행 중인 트랜잭션이 많은 경우 재부팅하는 데 시간이 오래 걸릴 수 있습니다.

Recovery completed for database <<DB_NAME>> (database ID <<id of database>>) in X second(s) (analysis X ms, redo X ms, undo X ms [system undo X ms, regular undo X ms].) This is an informational message only. No user action is required.

이 문제를 해결하려면 진행 중인 쿼리 수를 줄입니다. 다음 명령을 사용하여 데이터베이스에 활성 데이터 수정 트랜잭션이 있는지 확인합니다.

SELECT r.session_id,
       r.start_time,
       r.status,
       r.cpu_time,
       r.total_elapsed_time,
       st.TEXT AS batch_text
FROM sys.dm_exec_requests AS r
     CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st
     CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) AS qp
     where session_id <> @@SPID
ORDER BY cpu_time DESC;

명령 출력은 시작 시간 및 SQL 텍스트와 함께 데이터베이스에서 실행 중인 세션에 대한 정보를 제공합니다. 실행 중인 쿼리가 있는 경우 재부팅을 수행하기 전에 쿼리가 완료되도록 합니다.

DB 인스턴스의 VLF 수를 줄입니다.

인스턴스의 VLF 수가 많기 때문에 재부팅하는 데 시간이 오래 걸릴 수 있습니다. 매우 조금씩 증가(수동 또는 자동으로)한 초기의 작은 트랜잭션 로그에서 과도한 수의 VLF가 누적될 수 있습니다.

재부팅 중에 복구 단계를 시작하기 전에 SQL Server는 모든 VLF를 순차적으로 스캔합니다. 이 단계를 검색 단계라고 합니다. 많은 수의 VLF가 발견되면 오류 로그에 다음과 같은 알림이 표시됩니다.

Database %ls has more than %d virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files.

VLF 수를 줄이려면 다음과 같이 합니다.

참고: 이러한 단계는 업무가 바쁘지 않은 시간이나 업무 시간이 아닌 시간에 수행하는 것이 좋습니다.

  1. Microsoft SQL Server Management Studio에서 RDS for SQL Server 인스턴스에 마스터 사용자로 로그인합니다.
  2. DBCC SQLPERF(LOGSPACE) 쿼리를 실행하여 로그 파일 사용률을 확인합니다.
  3. 오류 로그에서 높은 VLF 알림을 받은 데이터베이스의 로그 파일을 축소합니다.
  4. 트랜잭션 로그 파일을 적절한 사용 크기로 한 번에 확장합니다. 이렇게 하면 많은 수의 VLF가 발생하는 자동 증가를 방지할 수 있습니다.

참고: 로그 파일을 축소하면 VLF 수가 줄어듭니다. 한 번 확장을 수행하면 VLF 생성 기준에 따라 필요한 VLF의 양이 제한됩니다. 자세한 내용은 Microsoft SQL 문서의 가상 로그 파일(VLF)을 참조하세요.