다음을 통해 공유


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 요청된 옵션(다시 컴파일)

사용자 작업

  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 이벤트 클래스