2013-04-18 77 views
0

我在MS SQL Server中使用的Sybase存儲過程鏈接服務器。每次執行存儲過程時,都會運行很長時間,看起來像是在執行前重新編譯。任何想法如何停止這種重新編譯?MSSQL存儲過程中得到重新編譯每次執行

+1

「看起來」聽起來像是重新編譯是不是被稱爲是真正的理論。你有什麼證據表明它是重新編譯,而不是僅僅是一個糟糕的查詢性能。 – Andrew

+0

存儲過程大約需要2個小時才能編譯。在獨立運行時,存儲過程中的第一個查詢在大約2分鐘內運行。但是,運行存儲過程時,相同的查詢不會運行,直到兩個小時後。 – user2296151

+0

這聽起來不像編譯成本,因爲在選擇一個足夠好的計劃之前,編譯已經切斷了願意花費多少時間進行編譯。 – Andrew

回答

0

其很難相信,重新編譯採取這種多少時間。我懷疑這個過程使用了一些舊的計劃來執行,而這並不是最優化的。

幾個點進行檢查。

  1. EXCUTE與重新編譯選項。這使得新的查詢計劃。
  2. 檢查proc中哪些查詢需要很長時間。如果安裝了MDA表,請檢查mosSysStatement。或者在運行存儲過程時檢入master..sysprocesses表。它會顯示當前正在運行的語句編號。它會給你公平的想法,採取什麼聲明。
  3. 運行存儲過程使用的表的更新統計信息。

感謝, 戈帕爾

+0

你可以讓我知道如果查詢計劃會隨着每次數據更改而改變? – user2296151