MSSQLSERVER_2814
세부 정보
제품 이름 |
SQL Server |
제품 버전 |
10.0 |
제품 빌드 번호 |
|
이벤트 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 |
옵션(recompile)이 요청됨 |
사용자 동작
다음 쿼리를 실행하여 재컴파일을 발생시키는 문을 봅니다. 여기서 sql_handle, starting_offset, ending_offset 및 plan_handle 자리 표시자는 오류 메시지는 오류 메시지에 지정된 값으로 바꾸십시오. 임시 및 준비된 Transact-SQL 문의 경우 database_name 및 object_name 열은 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 (sql_handle) AS st
WHERE qs.statement_start_offset = starting_offset
AND qs.statement_end_offset = ending_offset
AND qs.plan_handle = plan_handle;
이유 코드 설명에 따라 문, 일괄 처리 또는 프로시저를 수정하여 재컴파일을 방지합니다. 예를 들어 저장 프로시저에는 하나 이상의 SET 문이 포함되어 있을 수 있는데, 이러한 문을 프로시저에서 제거해야 합니다. 재컴파일의 원인 및 해결 방법에 대한 추가 예는 SQL Server 2005에서의 일괄 컴파일, 다시 컴파일 및 계획 캐싱 문제(Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005)를 참조하십시오.
문제가 지속되면 Microsoft 고객 지원 서비스에 문의하십시오.