Sql-Server

為 SQLHANDLE 檢測到可能的無限重新編譯

  • April 10, 2021

我一直在 sql 錯誤日誌中發現奇怪的錯誤消息:

Bocss:每小時都會發生同樣的僵局——需要調查

根據以下範例,其他 SPID 的錯誤日誌中還列出了許多重新編譯:

2015年9月4日14:30:10,spid64,未知,用於SQLHANDLE 0x0200000059631A288882589E0C54B76404CAE1B97E08D3680000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000000000000000000000檢測到可能無限的重新編譯起始偏移1038結束偏移2600的最後一個重新編譯原因是2. 2015年9月4日14點三十分10秒,spid150,未知,是為SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A0000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000起始偏移量998檢測到的一個可能的無窮的重新編譯結束偏移2520。最後重新編譯原因是2. 2015年9月4日14:30:09,spid67,未知檢測到可能無限的重新編譯為SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000起始偏移1064結束偏移2652是2. 2015年9月4日14最後重新編譯原因:30:09,spid163,未知,是為SQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle探測到一個可能無限的重新編譯0x06000400E7C7BF0EF0EB68A52C000000010000000000000000000000000000000000000000000000000000000 起始偏移量 1028 結束偏移量 2580。最後重新編譯的原因是 2。

是什麼原因造成的?

看起來我沒有記憶體中的計劃了。 在此處輸入圖像描述

遵循這篇文章 http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx的建議

然後作為一項安全措施禁用了全文目錄,這沒有任何區別,所以我完全回滾了更改(刪除了新對像等)。這也沒有什麼區別,最後似乎唯一阻止它的是重新啟動 SQL 實例,這立即解決了問題。

這也解決了我的問題,但是,我仍然要首先找到造成這種混亂的原因?

根據SQL Programmability & API Development Team Blog的錯誤日誌中的 Infinite recompile message ,當批處理中的語句連續重新編譯 100 次時會觸發此消息。

此消息並不一定意味著存在問題;它的存在是為了幫助解決可能合法地經常重新編譯的語句(例如,由於統計數據的快速變化),以及真正的無限編譯循環(這在極端情況下很少見)。

您應該首先從提供的資訊中辨識觸發語句,並在給出重新編譯原因的數字程式碼的上下文中對其進行評估。在聯機叢書中,包括SP:Recompile Event Class在內的多個地方都有這些程式碼及其含義的表格。

SQL Server 2012中的計劃記憶體和重新編譯中提供了更多資訊。

數值表

引用自:https://dba.stackexchange.com/questions/114354