sp_procedure_params_90_rowset에서 과도한 컴파일 차단


14

MSDN에 대한이 질문의 부활 : Blocked-process-report :이 대기 자원은 무엇입니까? "OBJECT : 32767 : 124607697 : 0 [COMPILE]"

나는 Profiler 에서이 진술을 붙 잡았다. 그들은 모두 3 초 동안 지속됩니다. 10 세 이상. 차단 활동은 MSDN 의 링크와 동일합니다 .

모든 호출은 3 가지 이름 지정을 사용합니다. 모두 다음과 같은 형식으로 다른 proc을 지정합니다.

exec [db1].[sys].sp_procedure_params_90_rowset N'proc1', 1, NULL, NULL
exec [db2].[sys].sp_procedure_params_90_rowset N'proc2', 1, NULL, NULL
exec [db3].[sys].sp_procedure_params_90_rowset N'proc3', 1, NULL, NULL
exec [db4].[sys].sp_procedure_params_90_rowset N'proc4', 1, NULL, NULL

이 차단 수준을 줄이려면 어떻게해야합니까?

(편집) 나는 지금 같은 것을보고있다 :

exec [db1].[sys].sp_primary_keys_rowset N'view1', N'dbo'
exec [db2].[sys].sp_primary_keys_rowset N'view1', N'dbo'
exec [db3].[sys].sp_primary_keys_rowset N'view1', N'dbo'
exec [db4].[sys].sp_primary_keys_rowset N'view1', N'dbo'

체계적인 일이 일어나고 있지만 다른 무엇을 해야할지 모르겠습니다. 발신자는 ADO를 통해 VB6입니다. 이 전화를하는 것은 ADO입니다.

차단 된 프로세스 보고서 예는 다음과 같습니다.

 <blocked-process-report>
    <blocked-process>
        <process
            id="process5bc1288"
            taskpriority="0"
            logused="0"
            waitresource="OBJECT: 32767:124607697:0 [COMPILE]"
            waittime="28887"
            ownerId="11638114050"
            transactionname="sqlsource_transform">
            <executionStack>
                <frame
                    line="1"
                    sqlhandle="0x000000000000000000000000000000000000000000000000">
                    <sqltext>EXEC [dbo].[spAlertDetectByPoll] ':V:^RMAlert^:Z:^&amp;N&amp;#RMAlert#&amp;S&amp;#L#&amp;UID&amp;#19#&amp;AGN&amp;#1#&amp;DFC&amp;#103#^', 1</sqltext>
                </frame>
            </executionStack>
            <inputbuf>
SET NO_BROWSETABLE OFF   </inputbuf>
        </process>
    </blocked-process>
    <blocking-process>
        <process
            status="suspended"
            waitresource="OBJECT: 32767:124607697:0 [COMPILE]"
            waittime="35693"
            spid="1121"
            sbid="0"
            ecid="0"
            priority="0"
            trancount="0"
            lastbatchstarted="2013-12-16T14:45:48.960">
            <executionStack>
                <frame
                    line="1"
                    sqlhandle="0x000000000000000000000000000000000000000000000000" />
            </executionStack>
            <inputbuf>
SET NO_BROWSETABLE OFF   </inputbuf>
        </process>
    </blocking-process>
</blocked-process-report>

SQL Server 2008 R2 용 최신 서비스 팩 및 누적 업데이트가 설치되어 있습니까?
Max Vernon

SP2 CU4 Microsoft SQL Server 2008 R2 (SP2)-10.50.4270.0 (X64)
dan holmes

일은 언제 시작 되었습니까? 최근에 서비스 팩 또는 누적 업데이트를 적용 했습니까? 또한 VB6 / ADO를 지원하고 있으며 이러한 시스템 프로세스가 한두 번 나타나는 것을 기억하지만 차단 문제는 없다고 생각합니다. 나는 그들이 너무 자주 호출되기 때문에 그들이 나온 것 같아요. 우리가 아직 10.50.2500을 유지하고 있기 때문에 이것이 SP / CU와 관련이 없기를기도합니다. 이런 것들이 각각 3-10 초가 걸리기 시작하면 죽음이 될 것입니다.
Jon Seigel

그것은 많은 중 하나를 pastbin pastebin.com/4wUgzby9 에 넣었습니다 . 이것은 약 2 ~ 3 주간 진행되었습니다. 우리는 오랫동안 CU를 적용하지 않았습니다. MSDN 게시물에 의해 2012 년 초에 처음으로 발생했습니다.
dan holmes

1
이것은 단지 증상 일 수 있습니다. RESOURCE_SEMAPHORE_QUERY_COMPILE에서 정기적으로 대기 활동이 있습니다. 내가 찾은이 waittype의 최선의 처리 방법은 다음과 같습니다. blogs.msdn.com/b/support_sql_france/archive/2012/02/07/…
dan holmes

답변:


2

무엇을 설명 하는 훌륭한 블로그 게시물 http://blogs.msdn.com/b/support_sql_france/archive/2012/02/07/sql-server-compilation-gateways-and-resource-semaphore-query-compile.aspx 가 있습니다. 사고.

SQL Server는 복잡성에 따라 정해진 수의 컴파일을 허용합니다. 그것들을 작은, 중간, 큰 그룹으로 묶습니다. 대규모 컴파일의 경우 한 번에 하나만 컴파일 할 수 있으므로 모든 프로세스가 큰 것으로 간주되면 각 프로세스를 순차적으로 컴파일해야한다고 가정 해 보겠습니다. 차단을 설명 할 수 있습니다.
문제에 대한 몇 가지 접근법이있을 수 있다고 생각합니다. 더 많은 리소스를 고려하십시오 (더 많은 CPU는 더 많은 중소 쿼리를 동시에 허용하거나 매체로 간주되는 것에 대한 임계 값을 올릴 수 있습니다). 또한 더 많은 메모리가 문제를 해결할 수 있습니다.

당신이 우리 대부분과 같다면 가능하지 않을 수도 있습니다. 다른 옵션은 ADO 통화를 검토하고 모든 통화가 동시에 발생하지 않도록 통화 수를 줄이거 나 분산시킬 수 있는지 확인하는 것입니다. 주어진 시간에 숫자를 줄이면 대기 시간이 줄어 듭니다.

그래도 문제가 해결되지 않으면 저장된 procs의 '컴파일 성'수정을 고려하십시오. 어쩌면 작은 덩어리로 나누면 작은 버킷이나 중간 버킷으로 줄이고 병렬 컴파일을 더 많이 할 수 있습니다. 또는 매번 프로세스를 다시 컴파일해야하는 이유를 결정하십시오. 다시 컴파일 할 필요가 없도록 다시 작성할 수 있는지 확인하십시오. 마지막으로 계획 안내서 사용을 고려합니다. 이를 통해 프로세서를 미리 컴파일 할 수 있으며 시간을 절약 할 수 있습니다.

희망이 도움이

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.