SQLHANDLEの無限再コンパイルの可能性が検出されました


10

私はSQLエラーログで奇妙なエラーメッセージを見つけてきました:

Bocss:1時間ごとに同じデッドロックが発生–調査が必要

また、次の例のように、他のSPIDのエラーログに多くの再コンパイルがリストされます。

2015年9月4日14:30:10、spid64、Unknown、SQLHANDLE 0x0200000059631A288882589E0C54B76404CAE1B97E08D3680000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600200000010000000000000000000000000000000000000000000000000000000開始オフセット600400000009000000 、spid150、Unknown、SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A0000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000開始オフセット998、最後のオフセット252015終了オフセット2.9 09終了オフセット25209 09終了オフセット25209 09終了オフセット2509 0930:09、spid163、不明、可能無限の再コンパイルがSQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle検出された可能無限の再コンパイルは、最後の再コンパイルの理由2. 2015年9月4日14れた2652終了オフセット1064オフセット開始SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000検出されました0x06000400E7C7BF0EF0EB68A52C00000001000000000000000000000000000000000000000000000000000000開始オフセット1028終了オフセット2580。最後の再コンパイル理由は2でした。

何が原因でしょうか?

キャッシュにプランがもうないようです。 ここに画像の説明を入力してください

この投稿のアドバイスに従って http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx

次に、安全対策によりフルテキストカタログが無効にされたため、これには違いがなかったため、変更を完全にロールバックしました(新しいオブジェクトをドロップしたなど)。これでも違いはありませんでした。結局、SQLインスタンスの再起動がそれを止めるように見えた唯一の事柄であり、これが問題を即座に解決しました。

これも私を整理しました、しかし、私はまだ最初にこの混乱を引き起こした原因を見つける必要がありますか?


2
エラーメッセージは、プランがキャッシュに存在しないことを示すものではありません。プランハンドルを誤ってコピーしたと思います。値が長すぎるか、短すぎます。私は実行することができますSELECT上のdm_exec_sql_textエラーを取得せずに、あなたのエラーメッセージにあるハンドルを使用して
マーク・Sinkinson

+ 1つのスポット
Marcello Miorelli、2015

回答:


11

SQL Programmability&API Development Team BlogのエラーログのInfinite recompileメッセージによると、このメッセージは、バッチ内のステートメントが100回続けて再コンパイルされたときにトリガーされます。

このメッセージは必ずしも問題があることを意味するものではありません。これは、頻繁に(たとえば、統計の急激な変化により)正当に再コンパイルされている可能性があるステートメントや、実際の無限コンパイルループ(極端な場合はまれです)のトラブルシューティングに役立ちます。

まず、提供された情報からトリガーステートメントを特定し、再コンパイルの理由を示す数値コードのコンテキストでそれを評価する必要があります。これらのコードとその意味の表は、SP:Recompileイベントクラスを含むBooks Onlineのいくつかの場所にあります。

SQL Server 2012のプランのキャッシュと再コンパイルで利用できる詳細情報があります

値の表

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.