當我必須查看計劃緩存/過度查詢重新編譯問題時,我遵循了Microsoft白皮書‘Plan Caching in SQL Server 2008’中提供的指導,我強烈建議您閱讀它,因爲它涵蓋了計劃緩存,查詢計劃重用,重新編譯原因,識別重新編譯和其他相關主題。因此,SQL Server Profiler(如果您將它安裝爲客戶端工具安裝的一部分,應位於Microsoft SQL Server 2008下的「性能工具」下)公開與查詢編譯直接相關的三個事件,這些事件可能有所幫助你:
您在使用存儲過程,從而有可能你只需要擔心SP:Recompile事件。只要重新編譯存儲過程,觸發器或用戶定義函數,此事件就會觸發。 TextData列將顯示導致語句重新編譯的tsql語句的文本,而EventSubClass列將顯示指示重新編譯原因的代碼。
爲SP EventSubClass代碼:重新編譯在SQL 2008
- 1 =架構改變
- 2 =統計更改
- 3 =重新編譯DNR
- 4 =設定選件已變更
- 5 =溫度表更改
- 6 =遠程行集更改
- 7 =對於瀏覽燙髮改變
- 更改了8個
- 9 = MPI查看=查詢通知環境的變化
- 10 =遊標選項更改
- 11 =帶重新編譯選項
如果您監視以下5個事件可以查看哪些存儲過程和語句正在SQL Server上調用,哪些正在觸發重新編譯:
個
- 存儲過程的
- SP:啓動
- SP:StmtStarting
- SP:重新編譯
- SP:已完成
- 性能
我通常還會設置Profiler跟蹤來捕獲這些事件的所有列。我會說,用這5個事件設置一個跟蹤,運行30到60秒的跟蹤,然後暫停它,然後你應該有什麼導致重新編譯的快照。
如果噪聲太多,您可以開始將列過濾器添加到跟蹤屬性以過濾輸入/輸出事件。例如,如果您發現大多數重新編譯僅發生在一次數據庫上,請在databaseID或databaseName列上設置列篩選器,以便在跟蹤中包含針對該數據庫運行的查詢。
然後開始尋找重新編譯查詢的模式,並使用Microsoft的白皮書作爲指導,說明爲什麼它們可能會觸發重新編譯。
非常有幫助,謝謝你,格倫。 – 2013-02-10 21:23:21