MSSQLSERVER_2814
적용 대상: SQL Server
세부 정보
attribute | 값 |
---|---|
제품 이름 | SQL Server |
이벤트 ID | 2814 |
이벤트 원본 | MSSQLSERVER |
구성 요소 | SQLEngine |
심볼 이름 | PR_POSSIBLE_INFINITE_RECOMPILE |
메시지 텍스트 | SQLHANDLE %hs, PlanHandle %hs, 오프셋 %d 시작, 종료 오프셋 %d에 대해 가능한 무한 다시 컴파일이 검색되었습니다. 마지막 다시 컴파일 이유는 %d입니다. |
설명
하나 이상의 문으로 인해 쿼리 일괄 처리가 50번 이상 다시 컴파일되었습니다. 재컴파일이 더 이상 수행되지 않도록 하려면 지정된 문을 수정해야 합니다.
다음 표에서는 다시 컴파일하는 이유를 나열합니다.
이유 코드 | 설명 |
---|---|
1 | 스키마가 변경됨 |
2 | 변경된 통계 |
3 | 컴파일이 지연됨 |
4 | 변경된 옵션 설정 |
5 | 임시 테이블이 변경됨 |
6 | 원격 행 집합이 변경됨 |
7 | 찾아보기 권한이 변경된 경우 |
8 | 쿼리 알림 환경이 변경됨 |
9 | 파티션 보기가 변경됨 |
10 | 커서 옵션이 변경됨 |
11 | 요청된 옵션(다시 컴파일) |
사용자 작업
다음 쿼리를 실행하여 다시 컴파일을 일으키는 문을 봅니다. sql_handle, starting_offset, ending_offset 및 plan_handle 자리 표시자를 오류 메시지에 지정된 값으로 바꿉다. database_name 및 object_name 열은 임시 및 준비된 Transact-SQL 문에 대한 NULL입니다.
SELECT DB_NAME(st.dbid) AS database_name, OBJECT_NAME(st.objectid) AS object_name, st.text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text (0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000 /* replace the 0x01000600B... value with the actual sql_handle*/) AS st WHERE qs.statement_start_offset = 123 /*replace 123 with actual starting_offset value*/ AND qs.statement_end_offset = 456 /*replace 456 with actual ending_offset value*/ AND qs.plan_handle = 0x06000100A27E7C1FA821B10600 /*replace 0x06000100A27E7C1FA821B10600with actual plan_handle value*/;
이유 코드 설명에 따라 문, 일괄 처리 또는 프로시저를 수정하여 다시 컴파일하지 않도록 합니다. 예를 들어 저장 프로시저에는 하나 이상의 SET 문이 포함될 수 있습니다. 이러한 문은 프로시저에서 제거해야 합니다. 다시 컴파일 원인 및 해결 방법에 대한 추가 예제는 SQL Server 2005의 Batch 컴파일, 다시 컴파일 및 계획 캐싱 문제를 참조하세요.
문제가 지속되면 Microsoft 고객 지원 서비스에 문의하십시오.