Một biên dịch lại vô hạn có thể đã được phát hiện cho SQLHANDLE


10

Tôi đã tìm thấy thông báo lỗi lạ trên nhật ký lỗi sql:

Bocs: cùng một bế tắc diễn ra mỗi giờ - cần điều tra

Ngoài ra rất nhiều biên dịch lại được liệt kê trong nhật ký lỗi cho các SPID khác theo các ví dụ sau:

09/04/2015 14: 30: 10, spid64, không xác định được , spid150, Không xác địnhMột biên dịch lại vô hạn có thể được phát hiện cho SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000 offset bắt đầu năm 1064 kết thúc bù đắp 2652. Lý do biên dịch lại cuối cùng được 2. 2015/09/04 14: 30: 09, spid163, Unknown, Một biên dịch lại vô hạn có thể được phát hiện cho SQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle 0x06000400E7C7BF0EF0EB68A52C00000001000000000000000000000000000000000000000000000000000000 bắt đầu bù 1028 kết thúc bù 2580. Lý do biên dịch lại cuối cùng là 2.

Điều gì có thể gây ra điều này?

Có vẻ như tôi không còn kế hoạch trong bộ nhớ cache nữa. nhập mô tả hình ảnh ở đây

làm theo lời khuyên của bài đăng này http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx

sau đó như một biện pháp an toàn đã vô hiệu hóa các danh mục văn bản đầy đủ, điều này không tạo ra sự khác biệt, vì vậy sau đó tôi hoàn toàn khôi phục các thay đổi (bỏ các đối tượng mới, v.v.). Điều này cũng không có gì khác biệt, cuối cùng, điều duy nhất dường như ngăn chặn nó là khởi động lại các phiên bản SQL, điều này ngay lập tức giải quyết vấn đề.

Điều này cũng sắp xếp tôi ra, tuy nhiên, tôi vẫn sẽ tìm ra nguyên nhân gây ra sự lộn xộn này ngay từ đầu?


2
Thông báo lỗi của bạn không biểu thị rằng gói không còn trong bộ đệm. Tôi tin rằng bạn đã sao chép không đúng cách xử lý kế hoạch và nó là một giá trị quá dài hoặc quá ngắn. Tôi có thể chạy một SELECTtrên dm_exec_sql_textbằng cách sử dụng tay cầm đó là trong thông báo lỗi của bạn, mà không nhận được một lỗi
Đánh dấu Sinkinson

+ 1 phát hiện tốt
Marcello Miorelli

Câu trả lời:


10

Theo thông báo biên dịch lại vô hạn trong thông báo lỗi trên Blog nhóm phát triển API & lập trình SQL, thông báo này được kích hoạt khi một câu lệnh trong một đợt biên dịch lại 100 lần liên tiếp.

Thông điệp này không nhất thiết có nghĩa là có vấn đề; nó tồn tại để giúp khắc phục các câu lệnh có thể được biên dịch lại một cách hợp pháp thường xuyên (ví dụ, do thay đổi nhanh chóng trong thống kê), cũng như các vòng lặp biên dịch vô hạn thực sự (sẽ rất hiếm khi xảy ra).

Bạn nên bắt đầu bằng cách xác định câu lệnh kích hoạt từ thông tin được cung cấp và đánh giá nó trong ngữ cảnh của mã số đưa ra lý do cho việc biên dịch lại. Có một bảng gồm các mã này và ý nghĩa của chúng ở một số nơi trong Sách trực tuyến, bao gồm cả SP: Recompile Event Class .

Có nhiều thông tin hơn có sẵn trong Bộ nhớ đệm và Biên dịch lại trong SQL Server 2012 .

Bảng giá trị

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.