Chặn biên dịch quá mức trên sp_procedure_params_90_rowset


14

Sự hồi sinh của câu hỏi này MSDN: Blocked-process-report: Waitresource này là gì "ĐỐI TƯỢNG: 32767: 124607697: 0 [MÁY TÍNH]"

Tôi đã bắt được những tuyên bố này trong Profiler. Tất cả đều có thời lượng trên 3 giây. Một số trên 10+. Hoạt động chặn giống như liên kết từ MSDN .

Tất cả các cuộc gọi sử dụng 3 phần đặt tên. Tất cả chỉ định một Proc khác nhau ở dạng chúng trông như sau:

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

Tôi có thể làm gì để giảm mức chặn này?

(chỉnh sửa) Bây giờ tôi đang thấy điều tương tự cho:

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'

Có một hệ thống nào đó đang diễn ra nhưng tôi không biết phải làm gì khác. người gọi là VB6 qua ADO. Đó là ADO thực hiện các cuộc gọi này.

Một ví dụ báo cáo quá trình bị chặn là dưới đây

 <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>

Bạn có gói dịch vụ mới nhất và các bản cập nhật tích lũy được cài đặt cho SQL Server 2008 R2 không?
Max Vernon

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

Khi nào thì điều này bắt đầu xảy ra? Gần đây bạn có áp dụng Gói dịch vụ hoặc Cập nhật tích lũy không? Tôi cũng hỗ trợ VB6 / ADO và tôi nhớ rằng đã thấy các procs hệ thống này xuất hiện một hoặc hai lần, nhưng tôi không nghĩ rằng có vấn đề chặn. Tôi nghĩ rằng họ đã đưa ra bởi vì họ được gọi rất thường xuyên. Tôi cầu nguyện điều này không liên quan đến SP / CU vì chúng tôi vẫn đang ở ngày 10.50.2500 và sẽ là cái chết nếu những thứ này bắt đầu mất 3-10 giây mỗi lần.
Jon Seigel 17/12/13

nó đặt một trong số nhiều vào pastbin pastebin.com/4wUgzby9 . điều này đã diễn ra trong khoảng 2 hoặc 3 tuần. Chúng tôi đã không áp dụng CU trong một thời gian dài. Nó đã xảy ra vào đầu năm 2012 lần đầu tiên theo ngày của bài viết MSDN.
dan holmes 17/12/13

1
đây có thể chỉ là triệu chứng Tôi có lực hấp dẫn chờ đợi thường xuyên trên RESOURCE_SEMAPHORE_QUERY_COMPILE. Dưới đây là cách xử lý tốt nhất cho loại bồi bàn này mà tôi đã tìm thấy: blog.msdn.com/b/support_sql_france/archive/2012/02/07/ Kẻ
dan holmes

Câu trả lời:


2

Có một bài đăng blog tuyệt vời http://bloss.msdn.com/b/support_sql_france/archive/2012/02/07/sql-server-compilation-gateways-and-resource-semaphore-query-compile.aspx giải thích những gì đang xảy ra.

SQL Server cho phép một số tập hợp dựa trên độ phức tạp của chúng. Nó nhóm chúng thành nhỏ, vừa và lớn. Đối với các phần tổng hợp lớn, có thể chỉ có một phần được biên dịch tại một thời điểm, vì vậy hãy giả sử tất cả các procs của bạn được coi là lớn, sau đó mỗi phần phải được biên dịch ser seri. Điều đó có thể giải thích cho việc chặn.
Tôi nghĩ rằng có thể có một số cách tiếp cận vấn đề - xem xét nhiều tài nguyên hơn (nhiều CPU hơn sẽ cho phép nhiều truy vấn vừa và nhỏ hơn đồng thời hoặc có thể tăng ngưỡng cho những gì được coi là phương tiện). Ngoài ra, bộ nhớ nhiều hơn có thể giải quyết vấn đề.

Nếu bạn giống như hầu hết chúng ta, điều đó có thể là không thể. Một tùy chọn khác có thể là xem xét các cuộc gọi ADO và xem liệu số lượng cuộc gọi có thể được giảm hoặc trải ra để không phải tất cả các cuộc gọi xảy ra cùng một lúc. Giảm số lượng tại bất kỳ thời điểm nào sẽ làm giảm thời gian chờ đợi của bạn.

Nếu điều đó không hiệu quả, hãy xem xét sửa chữa 'khả năng tương thích' của các procs được lưu trữ. Có thể chia chúng thành các phần nhỏ hơn có thể giảm chúng thành các thùng nhỏ hoặc trung bình và cho phép các phần tổng hợp song song hơn. Hoặc xác định lý do tại sao các procs cần được biên dịch lại mỗi lần. Xem nếu chúng có thể được viết lại sao cho chúng không cần phải biên dịch lại. Cuối cùng, tôi sẽ xem xét sử dụng Kế hoạch Hướng dẫn. Những thứ này sẽ cho phép các procs được biên dịch trước và có thể tiết kiệm thời gian.

Mong rằng sẽ giúp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.