증상
Microsoft SQL Server를 시작 하는 동안 데이터베이스 복구를 완료 하 고 클라이언트 연결을 사용할 수 있게 되 면 다음 중 하나 이상의 증상을 볼 수 있습니다.
현상 1
SQL Server 오류 로그에 다음과 유사한 오류 메시지와 어설션이 표시 됩니다.
2014-12-13 08:03:34.85 spid24s Using 'dbghelp.dll' version '4.0.5'2014-12-13 08:03:34.85 spid24s **Dump thread - spid = 0, EC = 0x0000000082274B202014-12-13 08:03:34.85 spid24s ***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0001.txt2014-12-13 08:03:34.85 spid24s * *******************************************************************************2014-12-13 08:03:34.85 spid24s *2014-12-13 08:03:34.85 spid24s * BEGIN STACK DUMP:2014-12-13 08:03:34.85 spid24s * 12/13/14 08:03:34 spid 242014-12-13 08:03:34.85 spid24s *2014-12-13 08:03:34.85 spid24s * Location: ghost.cpp:17422014-12-13 08:03:34.85 spid24s * Expression: tcln1 != NULL2014-12-13 08:03:34.85 spid24s * SPID: 242014-12-13 08:03:34.85 spid24s * Process ID: 354442014-12-13 08:03:34.85 spid24s *2014-12-13 08:03:35.47 spid24s Error: 17066, Severity: 16, State: 1.2014-12-13 08:03:35.47 spid24s SQL Server Assertion: File: <ghost.cpp>, line=1742 Failed Assertion = 'tcln1 != NULL'. 이 오류는 타이밍과 관련 된 것일 수 있습니다. 문을 다시 실행 한 후에도 오류가 계속 발생 하는 경우 DBCC CHECKDB를 사용 하 여 데이터베이스의 구조적 무결성을 확인 하거나 서버를 다시 시작 하 여 메모리 내 데이터 구조가 손상 되지 않았는지 확인 합니다.
현상 2
SQL Server 오류 로그에 다음과 유사한 오류 메시지 및 예외가 표시 됩니다.
2014-12-13 12:38: ' dbghelp ' 버전 ' 4.0.5 ' 2014를 사용 하는 30.25 spid51-12-13 12:38:30.25 spid51 * * * C:\Program Files\Microsoft SQL Server \ MSSQL10_50에 대 한 스택 덤프가 있습니다. SQL2008R2\MSSQL\LOG\SQLDump0003.txt2014-12-13 12:38:30.25 spid51 SqlDumpExceptionHandler: 프로세스 51에서 치명적인 예외 EXCEPTION_ACCESS_VIOLATION c0000005를 생성 했습니다. SQL Server is terminating this process.2014-12-13 12:38:30.25 spid51 * *******************************************************************************2014-12-13 12:38:30.25 spid51 *2014-12-13 12:38:30.25 spid51 * BEGIN STACK DUMP:2014-12-13 12:38:30.25 spid51 * 12/13/14 12:38:30 spid 512014-12-13 12:38:30.25 spid51 *2014-12-13 12:38:30.25 spid51 *2014-12-13 12:38:30.25 spid51 * Exception Address = 000000000030D47C Module(sqlservr+00000000000FD47C)2014-12-13 12:38:30.25 spid51 * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION2014-12-13 12:38:30.25 spid51 * Access Violation occurred reading address FFFFFFFFFFFFFFFF2014-12-13 12:38:30.25 spid51 * Input Buffer 54 bytes -2014-12-13 12:38:30.25 spid51 * exec usp_select12014-12-13 12:38:30.77 Server Error: 17310, Severity: 20, State: 1.2014-12-13 12:38:30.77 Server A user request from the session with SPID 51 generated a fatal exception. SQL Server가이 세션을 종료 합니다. 로그 디렉터리에 생성 된 덤프를 사용 하 여 기술 지원 서비스에 문의 합니다. 액세스 위반은 ' sqlservr.exe! '와 같은 호출 스택이 됩니다. TaskGhostCleanup:: IsHashed + 0x8dsqlservr! TaskGhostCleanup:: 큐 + 0x32sqlservr! IndexRowScanner:: MoveToRowOnNextPage + 0x9csqlservr! IndexDataSetSession:: GetNextRowValuesInternal + 0x11cb
증상 3
이전 현상 섹션에서 설명한 메시지를 받으면 SQL Server 오류 로그에 다음 메시지가 표시 됩니다.
2014-12-13 08:04:53.37 Server Process 0:0:0 (0x23c8) 작업자 0x000000002880C1A0는 스케줄러 23에서 생성 되지 않는 것으로 표시 됩니다. 스레드 생성 시간: 13062953007877. 대략적인 스레드 CPU 사용: 커널 0 밀리초, 사용자 0 밀리초. 프로세스 사용률 0%. 시스템 유휴 88%. 간격: 70013-2014 년 12 월 11 일: 04:53.37 Server Process 0:0:0 (0x71d8) Worker 0x000000002A8D21A0는 스케줄러 30에서 생성 되지 않는 것으로 표시 됩니다. 스레드 생성 시간: 13062953007891. 대략적인 스레드 CPU 사용: 커널 0 밀리초, 사용자 0 밀리초. 프로세스 사용률 0%. 시스템 유휴 88%. Interval: 70013 ms.2014-12-13 08:04:53.38 Server ***Unable to get thread context for spid 02014-12-13 08:04:53.38 Server * *******************************************************************************2014-12-13 08:04:53.38 Server *2014-12-13 08:04:53.38 Server * BEGIN STACK DUMP:2014-12-13 08:04:53.38 Server * 12/13/14 08:04:53 spid 294882014-12-13 08:04:53.38 Server *2014-12-13 08:04:53.38 Server * Non-yielding Scheduler2014-12-13 08:04:53.38 Server *2014-12-13 08:04:53.38 Server * *******************************************************************************2014-12-13 08:04:53.38 Server Stack Signature for the dump is 0x00000000000003412014-12-13 08:04:55.43 Server External dump process return code 0x20000001. 외부 덤프 프로세스가 오류를 반환 했습니다. 2014-12-13 08:04:55.43 Server Process 0:0:0 (0x9358) Worker 0x0000000081CE41A0이 스케줄러 4에서 생성 되지 않는 것으로 나타납니다. 스레드 생성 시간: 13062953009701. 대략적인 스레드 CPU 사용: 커널 0 밀리초, 사용자 15 밀리초. 프로세스 사용률 0%. 시스템 유휴 88%. 간격: 70011 밀리초.
이 시점에서 SQL Server가 사용자 요청에 응답 하지 않을 수 있습니다. 이 경우에는 서비스를 다시 시작 해야 문제를 해결할 수 있습니다.
원인
이 문제는이 프로세스가 완전히 초기화 되기 전에 사용자 쿼리에서 고스트 정리 대기열을 사용 하려고 할 때 발생 합니다.
해결 방법
서비스 팩 정보
이 문제를 해결 하려면 SQL Server 2014에 대 한 서비스 팩 1을 구합니다.
SQL Server 2014 SP1(서비스 팩 1)에 대 한 자세한 내용은 Sql server 2014 서비스 팩 1에서 해결 된 버그를 참조 하세요.
SQL Server 2008 SP4 용 핫픽스
이 문제를 해결 하려면 KB 3034373를 적용 하세요. 주문형 핫픽스 업데이트 패키지는 SQL Server 2008 SP4에서 사용할 수있습니다.
SQL Server 2008 R2 SP3 용 핫픽스
이 문제를 해결 하려면 KB 3033860 적용: SQL Server 2008 R2 SP3에 주문형 핫픽스 업데이트 패키지를 사용할 수있습니다.
누적 업데이트 정보
기능 향상은 SQL Server의 다음과 같은 누적 업데이트에서 도입 되었습니다.
SQL Server 2014에 대 한 누적 업데이트 6 /en-us/help/3031047
SQL Server 2012 SP2의 누적 업데이트 4 /en-us/help/3007556
SQL Server 2012 SP1 용 누적 업데이트 14 /en-us/help/3023636
각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.
해결 방법
이 문제를 해결 하려면 다음 단계를 따르세요.
-
T669 를 시작 매개 변수로 구성 합니다. 이 추적 플래그는 사용자 쿼리가 고스트 정리 프로세스에 대 한 요청을 대기 시키는 것을 방지 합니다.
-
Sql Server 에이전트 알림을 설정 하 여 SQL 메시지 3408에 대 한 작업을 트리거합니다. 예를 들어 다음과 같은 알림을 설정 합니다.
복구를 완료 했습니다. 이 메시지는 정보 제공 용입니다. 사용자 작업은 필요 하지 않습니다.
-
이 작업 내에서 TSQL 스크립트를 실행 하 여 5 ~ 10 분 동안 기다린 다음 DBCC TRACEOFF (669,-1) 명령을 실행 합니다.
이 절차에서는 SQL Server를 시작 하는 동안에만이 추적 플래그가 활성 상태 인지 확인 합니다. 이 추적 플래그를 사용 하면 백그라운드 고스트 정리 프로세스의 일반적인 작동에 영향을 주지 않습니다.
상태
Microsoft는이 문제가 SQL Server에 대 한 문제 이며 현재이 문제에 대 한 해결 방법을 조사 하 고 있음을 확인 했습니다. 이 기술 자료 문서는 사용할 수 있게 되는 추가 정보로 업데이트 됩니다.
참조
저장소 엔진 내: 자세한 경고 sp_add_alert 고스트 정리 (transact-sql) DBCC TRACEOFF (transact-sql)추적 플래그데이터베이스 엔진 시작 옵션