다음을 통해 공유


MSSQLSERVER_2814

Applies to:SQL Server

Details

Attribute Value
Product Name SQL Server
Event ID 2814
Event Source MSSQLSERVER
Component SQLEngine
Symbolic Name PR_POSSIBLE_INFINITE_RECOMPILE
Message Text SQLHANDLE %hs, PlanHandle %hs, 오프셋 %d 시작, 종료 오프셋 %d에 대해 가능한 무한 다시 컴파일이 검색되었습니다. 마지막 다시 컴파일 이유는 %d입니다.

Explanation

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

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

Reason code Description
1 Schema changed
2 Statistics changed
3 Deferred compile
4 옵션 변경 설정
5 임시 테이블이 변경됨
6 원격 행 집합 변경됨
7 찾아보기 권한이 변경되었습니다.
8 쿼리 알림 환경 변경됨
9 PartitionView changed
10 커서 옵션 변경됨
11 요청된 옵션(다시 컴파일)
12 매개 변수가 있는 계획 플러시됨
13 계획 선형화 테스트
14 변경된 데이터베이스 버전에 영향을 주는 계획
15 쿼리 저장소 계획 강제 정책 변경
16 쿼리 저장소 계획 강제 실패
17 쿼리 저장소에 계획이 없습니다.
18 인터리브 실행 필요 다시 컴파일
19 다시 컴파일되지 않음
20 쿼리 저장소 힌트가 변경됨
21 쿼리 저장소 힌트 애플리케이션 실패
22 커서 쿼리를 캡처하기 위한 쿼리 저장소 다시 컴파일
23 다중 계획 디스패처 계획을 정리하기 위한 다시 컴파일

모든 컴파일 코드를 보려면 다음 동적 관리 뷰 쿼리를 실행합니다.

SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';

User action

  1. 다음 쿼리를 실행하여 다시 컴파일을 일으키는 문을 봅니다. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. 및 object_name 열은 database_nameNULL 임시 및 준비된 Transact-SQL 문을 위한 것입니다.

    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 0x06000100A27E7C1FA821B10600 with actual plan_handle value */
    
  2. 이유 코드 설명에 따라 문, 일괄 처리 또는 프로시저를 수정하여 다시 컴파일하지 않도록 합니다. 예를 들어 저장 프로시저에는 하나 이상의 SET 문이 포함될 수 있습니다. 이러한 문은 프로시저에서 제거해야 합니다.

    다시 컴파일 원인 및 해결 방법의 더 많은 예제는 SQL Server 2005의 Batch 컴파일, 다시 컴파일 및 계획 캐싱 문제를 참조하세요. 다시 컴파일에 대한 자세한 내용은 실행 계획 다시 컴파일을 참조하세요.

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