SQL Server 컴파일 잠금을 인해 차단 일자

기술 자료 번역 기술 자료 번역
기술 자료: 263889 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

Microsoft SQL Server 저장된 프로시저 계획의 복사본을 하나만 일반적으로 캐시에서 한 번에. 이 강제 컴파일 프로세스의 일부 serialization 차지 하며이 동기화 부분적으로 컴파일 잠금을 사용 하 여 수행 됩니다. Compile 잠금을 얻어야 해당 저장된 프로시저를 실행할 때마다 동일한 실행 많은 연결 areconcurrently 저장 프로시저를 시스템 프로세스 Id (Spid) 각 개체에 대 한 단독 컴파일 잠금을 얻으려고 시도 하는 대로 서로 차단할 시작할 수 있습니다.

추가 정보

저장된 프로시저 재컴파일 저장 프로시저나 트리거 컴파일 잠금 한 이유입니다. 감소 또는 제거는 재컴파일에 여기 솔루션이입니다. 저장된 프로시저가 다시 컴파일되도록 할 수 있는 가장 일반적인 원인은 설명 및 재컴파일 빈도 줄이는 것에 대 한 유용한 정보 Microsoft 기술 자료의 다음 문서를 참조 하십시오.
243586 저장된 프로시저 재컴파일 문제 해결
컴파일 잠금이 발생 하는 또 다른 시나리오는 다음과 같은 조건이 충족 될 때
  • 저장된 프로시저를 실행 하는 사용자 프로시저 소유자가 아닙니다.
  • 저장된 프로시저 이름은 정규화 된 개체 소유자의 이름이 아닙니다.
예를 들어, "dbo" 사용자가 dbo.mystoredproc 개체 소유한 경우 "exec mystoredproc" 명령을 사용 하 여이 저장된 프로시저를 실행 하는 다른 사용자를 "해리," 초기 캐시 조회 개체 이름별으로 개체 소유자가 한정 되어 있기 때문에 실패 합니다. (아직 알려지지 Harry.mystoredproc 라는 다른 저장된 프로시저가 있는지 여부를. 따라서 SQL Server 수 없습니다 dbo.mystoredproc에 대 한 캐시 된 계획 실행에 가장 적합 한지.) SQL Server 다음 절차에 대 한 단독 컴파일 잠금을 가져오고 준비 절차를 컴파일할 수는. 개체 이름 개체 ID를 확인 포함 SQL Server 계획을 컴파일합니다, 전에 SQL Server 개체 ID를 사용 하 여 프로시저 캐시의 더 정확한 검색을 수행 하 고 소유자 한정 하지 않고 훨씬 이전에 컴파일된 계획을 찾을 수 있습니다.

기존 계획 없으면 SQL Server 캐시 된 계획을 재사용 및 저장 된 프로시저를 실제로 컴파일되지 않습니다. 그러나 소유자 한정 부족 하면 SQL Server 두 번째 캐시 조회 수행 하 고 프로그램 기존 캐시 된 실행 계획을 다시 사용할 수 있습니다 결정 하기 전에 컴파일 단독 잠금을 합니다. 잠그고 조회 및이 지점에 도달 하는 데 필요한 다른 작업을 수행 하 고 차단으로 이어지는 지연이 컴파일 잠금 도입할 수 있습니다. 특히 많은 사용자가 동시에 소유자 이름을 제공 하지 않고 프로시저를 실행 하는 저장된 프로시저의 소유자입니다. 수 컴파일 잠금을 기다리는 Spid 표시 되지 않으면, 경우에 소유자 한정 부족 수 저장된 프로시저 실행에 지연이 발생할 불필요 하 게 높은 CPU 사용률을 발생 합니다.

이 문제가 발생 하면 SQL Server Profiler 추적에서 다음 순서 대로 이벤트가 기록 됩니다. (캐시 관련 이벤트가 추적을 활성화 해야 고급 이벤트. 이렇게 하려면 도구 메뉴에서옵션 을 클릭 한 다음 선택 모든 이벤트 클래스.)

표 축소표 확대
이벤트 클래스텍스트
RPC: 시작mystoredproc
SP:CacheMissmystoredproc
SP:ExecContextHitmystoredproc
SP: 시작mystoredproc
......

SP:CacheMiss이름으로 캐시 조회에 실패 하는 경우에 발생 합니다. 다음 SP:ExecContextHit 모호한 개체 이름 개체 ID로 해결 된 후 일치 하는 캐시 된 계획을 캐시에서 찾은 궁극적으로 나타냅니다. 상황에 따라 sp: cachehitSP:ExecContextHit대신 나타날 수 있습니다.

솔루션을이 문제는 컴파일 잠금 소유자 한정 된 저장된 프로시저에 대 한 참조를 확인 하려면입니다. (대신 exec mystoredproc사용 하 여 exec dbo.mystoredproc.) 소유자 한정 성능상의 이유로 중요 한 요소 이기는 저장된 프로시저 추가 캐시 조회 않도록 데이터베이스 이름으로 한정할 필요가 없습니다.

차단 컴파일 잠금을 다음 Microsoft 기술 자료 문서에서 정의 하는 블로킹 스크립트를 사용 하 여 검색할 수 있습니다으로 인.
251004 INF: SQL Server 7.0 블로킹 모니터링 방법
271509 INF: SQL Server 2000 블로킹을 모니터링 하는 방법
다음 블로킹 스크립트 출력에서 관찰할 수 있는 컴파일 블로킹 일부 일반적인 특성은:
  • 일반적으로 차단 하 고 차단 된 Spid를 lastwaittype LCK_M_X (단독) 이며 대기자 는 폼의 "탭: dbid:object_id [[컴파일]]" "object_id" 저장된 프로시저의 개체 ID입니다.
  • 차단기는 waittype 0x0000, 실행 가능 상태입니다. Blockees는 유형 (단독 잠금) 0x000e 휴면 상태입니다.
  • 블로킹 문제 기간이 긴 수도 있습니다, 하지만 다른 Spid는 오랫동안 차단 하는 없는 단일 SPID는. 롤링 차단 있습니다. 한 컴파일 완료 되는 즉시 다른 SPID aseveral 초 이내 헤드 차단 등의 역할은.
다음 정보 sysprocesses 스냅숏에서 kind ofblocking이 중입니다.
   spid  blocked  waittype  waittime  lastwaittype  waitresource
   ----  -------  --------  --------  ------------  -------------------------
   
   221    29      0x000e    2141      LCK_M_X       TAB: 6:834102 [[COMPILE]]
   228    29      0x000e    2235      LCK_M_X       TAB: 6:834102 [[COMPILE]]
    29   214      0x000e    3937      LCK_M_X       TAB: 6:834102 [[COMPILE]]
    13   214      0x000e    1094      LCK_M_X       TAB: 6:834102 [[COMPILE]]
    68   214      0x000e    1968      LCK_M_X       TAB: 6:834102 [[COMPILE]]
   214     0      0x0000       0      LCK_M_X       TAB: 6:834102 [[COMPILE]]
대기열 ("6:834102")는 데이터베이스 ID 6 및 834102 개체 ID입니다. 이 개체 ID 저장된 프로시저, 테이블 "TAB" 잠금 유형) (불구 하에 속해 있음을 주의 해야 합니다.

노트
  • SQL Server 2005를 사용 하는 경우 뷰 집합으로 구현 되어 다양 한 SQL Server 2000에서 시스템 테이블입니다. 이러한 보기는 호환성 보기 라고 하 고는 이전 버전과 호환성만을 위한 것입니다. 호환성 뷰는 SQL Server 2000에서 사용할 수 있었던 동일한 메타 데이터를 노출 합니다. SQL Server 2000 시스템 테이블은 SQL Server 2005 시스템 보기 사이의 매핑에 대 한 자세한 내용은 SQL Server 2005 온라인 설명서의 "매핑 SQL Server 2000 시스템 테이블에 SQL Server 2005 시스템 뷰" 항목을 참조 하십시오.
  • 저장된 프로시저 이름을 "sp_" 접두사로 시작 하 고 master 데이터베이스에 없는 소유자-선별한 저장된 프로시저가 있는 경우에 각 실행에 대해 적중 캐시 전에SP:CacheMiss표시 됩니다. 이 SQL Server 시스템 저장된 프로시저는 저장 프로시저와 시스템 저장 프로시저는 다른 이름 확인 규칙을 sp_ 접두사 보면. ("선호" 위치는 master 데이터베이스에서입니다.) 사용자가 만든 저장 된 프로시저 이름을 "sp_"로 시작 하지 않아야 합니다.
  • 소유자 한정 프로시저를 만든 것이 사례는 소유자 한정 프로시저를 실행 될 경우 소유자 정규화 된 프로시저 수CacheMiss 를 얻을 또는 컴파일 잠금 요청 있지만 결국 캐시 된 계획을 사용 하 여. 따라서이 프로시저가 실제로 컴파일하지는 및 많은 오버 헤드가 발생 하면. 그러나 특정 상황에서 프로시저 형식으로 작성 된 것 보다 다른 사례와 같은 프로시저를 실행 하려고 많은 Spid 경우 컴파일 잠금 요청 "체인 차단" 상황이 발생할 수 있습니다. 정렬 순서 또는 데이터 정렬을 서버 또는 데이터베이스에서 사용 되는 관계 없이 마찬가지입니다. 이 문제에 대 한 이유는 프로시저 캐시의 찾기에 사용 되는 알고리즘 (성능상의 이유로) 해시 값의 대/소문자가 다른 경우 변경할 수 있는 기반을.

    문제를 해결 하려면 삭제 하 고 절차와 동일한 대/소문자를 사용 하 여 프로시저를 만들려면 응용 프로그램이 실행 되는. 프로시저가 동일한 대/소문자를 사용 하는 모든 응용 프로그램에서 실행 되도록 확인도 만들 수 있습니다.
  • 언어 이벤트 대신 RPC로 저장된 프로시저를 실행 하려고 하면 SQL Server 해야 구문 분석 및 언어 이벤트 쿼리 컴파일, 쿼리가 특정 프로시저를 실행 한 다음 해당 프로시저 캐시에서 계획을 찾을 하려고 시도 하는지 확인 합니다. SQL Server 구문 분석 및 언어 이벤트 컴파일이 상황을 방지 하려면 RPC로 SQL 쿼리가 보내지지 않도록 해야.

    자세한 내용은 온라인 설명서의 "저장 프로시저 만들기" 문서 "시스템 저장 프로시저" 섹션을 참조 하십시오.


알려진 문제

계획 캐싱을 방지 하는 몇 가지 알려진된 문제는 다음과 같습니다.
  • BLOB 변수에 저장 프로시저 매개 변수를 사용합니다. 자세한 내용을 보시려면, Microsoft 기술 자료의 다음 문서 번호를 클릭해 주십시오.
    2380435 FIX: 저장된 프로시저를 사용 하 여 BLOB 변수에 변수 Microsoft SQL Server 2008에는 문자열 함수에서 사용 하는 경우 저장된 프로시저에 대 한 쿼리 계획이 캐시 되지 않습니다.
  • 열린 대칭 키를 사용 하 여 저장 프로시저/쿼리 일괄 처리에서. 자세한 내용은 다음 MSDN 블로그를 참조 하십시오.
    http://blogs.msdn.com/b/sqlserverfaq/archive/2010/09/08/open-symmetric-key-command-prevents-query-plan-caching.aspx

속성

기술 자료: 263889 - 마지막 검토: 2013년 11월 1일 금요일 - 수정: 2.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
키워드:?
kbinfo kbmt KB263889 KbMtko
기계 번역된 문서
이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.
이 문서의 영문 버전 보기:263889

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com