적용 대상
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Microsoft는 다운로드 가능한 파일 하나에 Microsoft SQL Server 2012 수정 사항을 배포합니다. 수정 사항은 누적되므로 각 새 릴리스에는 이전 SQL Server 2012 업데이트 릴리스에 포함된 모든 핫픽스 및 모든 보안 업데이트가 포함됩니다.

증상

다음과 같은 경우를 생각해 볼 수 있습니다.

  • Microsoft SQL Server 2012에서 TVP(테이블 반환 매개 변수)를 사용하는 저장 프로시저를 만듭니다.

  • SQL Profiler 또는 SQL Server 확장 이벤트를 사용하여 RPC:Start 및 RPC:Completed 이벤트를 캡처합니다.

  • TVP를 사용하는 쿼리를 실행합니다.

  • 쿼리 시간이 초과됩니다.

이 시나리오에서는 생성되지 않는 스케줄러 오류가 발생하고 동일한 스케줄러에서 실행되는 쿼리가 느리게 실행됩니다. 또한 미니 덤프 파일은 SQL Server 로그 폴더에 생성됩니다.이 문제가 발생하면 다음과 유사한 오류 메시지가 표시됩니다.

System.Data.SqlClient.SqlException(0x80131904): 제한 시간이 만료되었습니다. 작업이 완료되기 전에 경과된 시간 제한 기간 또는 서버가 응답하지 않습니다.System.Data.SqlClient.SqlClient.TdsParser.ThrowExceptionAndWarning()의 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 예외, 부울 breakConnection)에서 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObject stateObj)의 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()System.Data.SqlClient.TdsParserStateObject.ReadByte()at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)system.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String 메서드, DbAsyncResult 결과)(System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at TVPApp.Program.Main(String[] args)

다음과 유사한 오류 메시지와 함께 생성되지 않는 스케줄러 오류가 SQL Server 오류 로그에 기록됩니다.

<날짜><시간> 서버 사용 'dbghelp.dll' 버전 '4.0.5'<날짜><시간> 서버 ***spid #<날짜><시간> 서버 * *******************************************************************************><2 스레드 컨텍스트를 가져올 수 없습니다. 날짜><시간> 서버 *><6 날짜><시간> 서버 * BEGIN STACK DUMP:><0 날짜><시간> 서버 * <날짜><시간> spid #><8 날짜><시간> 서버 *><2 날짜><시간> 서버 * 비수익 스케줄러><6 날짜><시간> 서버 *<날짜><시간> 서버 * *******************************************************************************< 날짜><시간> 서버 스택 서명은<날짜><> 서버 외부 덤프 프로세스 반환 코드 0x20000001 0x000000000000002C.외부 덤프 프로세스는 오류를 반환하지 않았습니다.<날짜><시간> 서버 프로세스 0:0:0(0x1670) 작업자 0x0000000004EDE160 Scheduler 5에서 생성되지 않는 것으로 보입니다. 스레드 생성 시간: 13014210386757. 사용된 약 스레드 CPU: 커널 0ms, 사용자 70106ms. 프로세스 사용률 16%. 시스템 유휴 77%. 간격: 70140ms.<날짜><시간> 서버 프로세스 0:0:0(0x1670) 작업자 0x0000000004EDE160 Scheduler 5에서 생성되지 않는 것으로 보입니다. 스레드 생성 시간:

원인

이 문제는 SQL Server 2012 데이터베이스 엔진의 오류로 인해 발생합니다. TVP의 텍스트 열은 삽입 문자열 또는 버퍼로 구현되고 행 수가 증가하면 버퍼 수가 증가합니다. 그러나 버퍼를 해제하는 프로세스는 시간이 많이 걸립니다. 따라서 릴리스 및 축소 작업이 발생할 때 생성되지 않는 스케줄러 오류가 발생합니다. 참고 다음 Microsoft 기술 자료 문서에서도 비슷한 문제가 해결되었습니다. 그러나 문서에 설명된 누적 업데이트 패키지는 쿼리 제한 시간 문제가 아닙니다.

2520808 수정: SQL Profiler 또는 SQL Server 확장 이벤트를 사용하는 경우 2008년 SQL Server 또는 SQL Server 2008 R2에서 TVP를 사용하는 쿼리를 실행할 때 발생하는 비수익 스케줄러 오류

해결 방법

누적 업데이트 정보

SQL Server 2012 SP1(서비스 팩 1)의 누적 업데이트 패키지 5

이 문제에 대한 수정 사항은 누적 업데이트 5에서 처음 릴리스되었습니다. SQL Server 2012에 대한 이 누적 업데이트 패키지를 가져오는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 문서를 확인합니다.

2861107 SQL Server 2012용 누적 업데이트 패키지 5참조 빌드가 누적되므로 각 새 수정 릴리스에는 이전 SQL Server 2012 수정 릴리스에 포함된 모든 핫픽스 및 모든 보안 수정 사항이 포함됩니다. 이 핫픽스를 포함하는 최신 수정 릴리스를 적용하는 것이 좋습니다. 자세한 내용을 확인하려면 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.

2772858 SQL Server 2012 서비스 팩 1이 릴리스된 후 릴리스된 SQL Server 2012 빌드

해결 방법 

이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.

  • SQL Profiler 또는 SQL Server 확장 이벤트를 사용하지 마세요.

  • 추적 정의에서 RPC:Start 및 RPC:Completed 검사 상자를 지우려면 클릭합니다.

상태

Microsoft는 "적용 대상" 절에 나열한 Microsoft 제품에서 이 문제를 확인했습니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.