2009-02-27 62 views
0

我在工作中重寫了一個存儲過程,主要是爲了阻止它乾淨地讀取數據並且沒有做出任何重大的結構性更改。然而,針對當前版本運行新版本,我發現新版本在開發數據庫上運行的時間差不多有兩倍,而這些數據庫沒有太多活動!是什麼觸發了SqlServer 2000中的緩存清除工作

繼本網站的建議: http://www.sql-server-performance.com/articles/per/optimizing_sp_recompiles_p1.aspx 我使用Profiler來看看發生了什麼事讓我吃驚有很多的「緩存中刪除」的新版本,但沒有爲當前的版本!

誰能告訴我什麼觸發緩存被丟棄?

我有所有的臨時表定義和索引建立在前面(雖然教科書說INSERT後構建標記通常更好,我已經用這種方法進行了實驗,發現其實際運行速度較慢);而且我還沒有對任何引用的對象進行任何模式更改。

感謝,

+0

你能否給我們多一點想法存儲過程在做什麼,以及它究竟從緩存中刪除了什麼? – 2009-02-27 13:11:09

回答

0

是交易僅涵蓋哪些需要是原子的?交易是否必要?例如,如果更新:

INSERT INTO TBL(V1,V2,V3)從otherTable

也就是默認選擇原子someValues。

0

我只是做了一些實驗,發現這個具有BEGIN和代碼塊COMMIT交易實際上surpresses緩存中刪除,雖然這可能不是可取的,如果它要堅持到高長時間使用表格: - \ 有什麼辦法可以解決這個問題,而無需在事務中封裝代碼塊?