증상
Microsoft SQL Server 2014, 2016 또는 2017이 설치 되어 있다고 가정 합니다. 다음 문제 중 하나 이상이 발생할 수 있습니다.
-
SQL Server 인스턴스가 응답 하지 않는 것으로 나타나고 "비 생성 스케줄러" 오류가 발생 합니다. 복구 하려면 서버를 다시 시작 해야 할 수 있습니다.
-
트랜잭션의 롤백을 완료 하는 데 시간이 오래 걸릴 수 있습니다. 대부분의 경우 인스턴스를 다시 시작 하면 데이터베이스를 롤백할 때 보다 훨씬 빠르게 복구할 수 있습니다. 롤백을 완료 하는 데 시간이 오래 걸리는 이유는 여러 가지가 있으므로 다시 시작 하기 전에 롤백을 모니터링 하는 방법에 대 한 자세한 내용은 아래 "추가 정보" 섹션을 참조 하세요.
-
SOS_OBJECT_STORE 등의 spinlock에는 높은 대기 작업이 표시 될 수 있습니다.
해결 방법
이 문제는 다음과 같은 SQL Server 누적 업데이트에서 해결 되었습니다.
각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.
SQL Server에 대 한 서비스 팩 정보
이 업데이트는 다음 SQL Server 서비스 팩에서 해결 되었습니다.
서비스 팩은 누적 됩니다. 새로운 각 서비스 팩에는 이전 서비스 팩의 모든 수정 프로그램과 함께 새로운 수정 프로그램이 포함 되어 있습니다. 최신 서비스 팩과 해당 서비스 팩에 대 한 최신 누적 업데이트를 적용 하는 것이 좋습니다. 최신 서비스 팩을 설치 하기 전에 이전 서비스 팩을 설치할 필요가 없습니다. 최신 서비스 팩 및 최신 누적 업데이트에 대 한 자세한 정보를 보려면 다음 문서의 표 1을 사용 하세요.
추가 정보
롤백에 오랜 시간이 소요 되는 경우, 트랜잭션 로그 파일에 많은 수의 VLFs, 느린 I/o 등의 여러 가지 이유가 있습니다. 이 문서에 설명 된 문제가 느린 롤백의 근본 원인 인지 확인 하려면 다음 기법을 사용 하 여 롤백 작업의 진행 상황을 모니터링 하는 것이 좋습니다.
-
Sys.dm_exec_requests에서 명령이 "중단/롤백"으로 설정 된 session_id를 식별 하 고 세션이 진행 상태를 나타내는 IO 및 CPU 시간 모두에 누적 되는지 확인 합니다. IO가 변경 되지 않는 경우이 문서에서 설명 하는 문제가 발생할 수 있습니다.
-
쿼리 sys.dm_tran_database_transactions 는 다음과 같은 쿼리를 사용 하 여 롤백의 현재 상태를 식별 합니다.
Getdate ()를 CurrentTime, database_transaction_next_undo_lsn, database_transaction_begin_lsn, t.transaction_id, database_transaction_begin_time, database_transaction_log_record_count, db_name (t.database_id)으로 선택 합니다.
Sys.dm_tran_database_transactions t
Sys.dm_exec_requests s에 가입 T.transaction_id = s.transaction_id
여기서 t.database_id = db_id (' <데이터베이스 이름') 및 s.session_id =<Session_id 롤백 작업을 수행>
참고:
위의 쿼리에서
database_transaction_next_undo_lsn 는 실행 취소할 다음 레코드의 lsn입니다. database_transaction_begin_lsn 는 트랜잭션 로그의 트랜잭션에 대 한 시작 레코드의 lsn입니다.
이 쿼리의 각 스냅숏에 대해 database_transaction_next_undo_lsn 를 감소 해야 합니다. Database_transaction_next_undo_lsn database_transaction_begin_lsn에 도달 하면 롤백이 성공적으로 완료 됩니다.
이 목표는 미리 결정 된 간격 내에 이전 쿼리의 몇 가지 스냅숏을 만든 다음 해당 간격 내에서 database_transaction_next_undo_lsn 에서 처리 되는 lsns의 델타를 사용 하 고 database_transaction_next_undo_lsn database_transaction_begin_lsn에 도달 하는 데 걸리는 시간을 추정 하는 데 소요 되는 시간을 추정 하는 것입니다.
각 스냅숏 간의 훌륭한 속도로 롤백이 진행 되는 경우에는 SQL Server 인스턴스를 다시 시작 하지 않고 자체적으로 롤백 작업을 완료할 수 있다는 것을 제안 합니다.
장기 실행 복구에 대 한 자세한 내용은 다음 문서를 참조 하세요.
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.
참조
Microsoft에서 소프트웨어 업데이트를 설명 하는 데 사용 하는 용어에 대해 알아봅니다.