다음을 통해 공유


MSSQLSERVER_2814

적용 대상:SQL Server

세부 정보

attribute
제품 이름 SQL 서버
이벤트 ID 2814
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 PR_가능한_무한_재컴파일
메시지 텍스트 SQLHANDLE %hs, PlanHandle %hs, 오프셋 %d 시작, 종료 오프셋 %d에 대해 가능한 무한 다시 컴파일이 검색되었습니다. 마지막 다시 컴파일 이유는 %d입니다.

설명

하나 이상의 문으로 인해 쿼리 일괄 처리가 50번 이상 다시 컴파일되었습니다. 재컴파일이 더 이상 수행되지 않도록 하려면 지정된 문을 수정해야 합니다.

다음 표에서는 다시 컴파일하는 이유를 나열합니다.

이유 코드 설명
1 스키마가 변경됨
2 통계 변경됨
3 컴파일이 지연됨
4 변경된 옵션 설정
5 임시 테이블이 변경됨
6 원격 행 집합 변경됨
7 찾아보기 권한이 변경된 경우
8 (여덟) 쿼리 알림 환경 변경됨
9 파티션 보기가 변경됨
10 커서 옵션 변경됨
11 요청된 옵션(다시 컴파일)
12 매개 변수가 있는 계획 플러시됨
13 계획 선형화 테스트
14 변경된 데이터베이스 버전에 영향을 주는 계획
15 쿼리 저장소 계획 강제 정책 변경
16 쿼리 저장소 계획 강제 실패
17 쿼리 저장소에 계획이 없습니다.
18 인터리브 실행 필요 다시 컴파일
19 다시 컴파일되지 않음
20 쿼리 저장소 힌트가 변경됨

사용자 작업

  1. 다음 쿼리를 실행하여 다시 컴파일을 일으키는 문을 봅니다. sql_handle, starting_offset, ending_offsetplan_handle 자리 표시자를 오류 메시지에 지정된 값으로 바꿉다. database_nameobject_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*/;
    
  2. 이유 코드 설명에 따라 문, 일괄 처리 또는 프로시저를 수정하여 다시 컴파일하지 않도록 합니다. 예를 들어 저장 프로시저에는 하나 이상의 SET 문이 포함될 수 있습니다. 이러한 문은 프로시저에서 제거해야 합니다. 다시 컴파일 원인 및 해결 방법에 대한 추가 예제는 SQL Server 2005의 Batch 컴파일, 다시 컴파일 및 계획 캐싱 문제를 참조하세요.

  3. 문제가 지속되면 Microsoft 고객 지원 서비스에 문의하십시오.

참고 항목

SQL:StmtRecompile 이벤트 클래스