客戶端在執行存儲過程時報告了非常奇怪的行爲的重複實例。MS SQL Server 2005 - 存儲過程「自發中斷」
它們具有運行易失性數據集的高速緩存轉置的代碼。一個存儲過程寫來重新處理需求的數據集,如果:
1.數據集已經自上次再處理改變
2. datset一直不變5分鐘
(第二個條件期間停止大規模的重複重新計算變化的時代。)
這工作得很好了幾個星期後,SP正在採取1-2秒即可完成再處理,並在需要時只做到了。然後......
- 的SP突然「停止工作」(它只是不停地奔跑,再也沒有回來)
- 我們以一種微妙的方式改變了SP和它
- 幾天後再次合作就停止再次合作,然後
- 有人說:「我們已經看到在此之前,剛剛重新編譯SP」
- 在不改變我們重新編譯了SP的代碼,它的工作
- 幾天後它停止工作了
這已經重複很多次。 SP突然「停止工作」,從不返回,客戶超時。 (我們嘗試通過管理工作室運行它,並在15分鐘後取消了查詢。)
然而,每次我們重新編譯SP時,它都會突然再次運行。
我還沒有在適當的EXEC語句上嘗試WITH RECOMPILE,但我不特別想這樣做。它每小時調用一百次,通常不做任何事情(它只能每天重複處理數據)。如果可能的話我想避免重新編譯的是一個相對複雜的SP的開銷「,只是爲了避免一些東西,‘不應該’發生......
- 有沒有人在此之前經歷?
- 有沒有人對如何克服它什麼建議嗎?
乾杯,
Dems。
編輯:
的pseduo代碼將如下所示:
- 讀取的 「a」 從TABLE_X
- 讀 「B」 從TABLE_X
- 如果(a < b)返回
- BEGIN TRANSACTION
- DELETE table_y
- INSERT INTO table_y < 3選擇聯合在一起>
- UPDATE TABLE_X
- COMMIT TRANSACTION
的選擇是 「不漂亮」,但是當在線中執行他們立即執行。包括當SP拒絕完成時。並且剖析器顯示它是INS在SP處「掛起」的位置
SP沒有參數,sp_lock也沒有顯示任何阻止該過程的參數。
聽起來像你有一個事務沒有被提交或回滾。很難說沒有看到代碼。 – Juliet 2009-06-18 21:24:26
哦,它並不會傷害到下載最新的服務包和upates。 – Juliet 2009-06-18 21:26:28
它必須是LOCK,或者至少表現如此...... – tekBlues 2009-06-18 21:29:56