2010-08-17 42 views
3

我們有一個正在開發的網站,當我們將它部署到客戶端的生產服務器時,我們在幾個小時後開始查詢超時。SQL Server性能和更新統計信息

這是與單個用戶測試它與我們的服務器(這是在SQL Server版本號上是相同的 - 2005 SP3)上,我們從未有過同樣的問題。

我們的一個高級開發人員曾在之前的工作中遇到類似的行爲,他跑了查詢手動更新統計和問題奇蹟般地走了 - 查詢在幾毫秒爲單位返回。

幾個小時後,發生了同樣的問題。所以我們再次手動更新統計數據,並再次出現問題。我們已經檢查了數據庫屬性,並確定自動更新統計信息isTRUE。

作爲一種臨時措施,我們已經設定了一項任務來定期更新統計數據,但顯然這不是一個好的解決方案。

誰遇到這個問題的開發商面前是肯定它是一個環境問題 - 當它發生了他之前,它走它自己的協議後幾天。

我們檢查了他們的數據庫服務器上的SQL服務器安裝,這不是我認爲是正常的。雖然他們安裝了SQL 2005(而不是2008),但安裝目錄中有一個空的「100」文件夾。還有MSQL.1,MSQL.2,MSQL.3和MSQL.4(這是可執行文件和數據實際存儲的地方)。

如果任何人有任何想法,我們會很感激 - 我說,而不是統計數據沒有更新,他們已經在某種程度上成爲腐敗的意見。

非常感謝

託尼

+1

我剛剛接受了一半以上的問題的答案 - 我沒有這樣做的是那些我沒有得到有用的答案 - 感謝指出這 – 2010-08-17 18:03:15

+2

這是開發/編碼所以屬於在這裏SO,而不是ServerFault。它也被代碼修復了。 – gbn 2010-08-17 18:50:27

回答

4

是不是統計信息過時。當更新統計數據時,會發生什麼情況,所有計劃都會失效,並且一些壞的緩存計劃會被驅逐。事情運行順利,直到一個糟糕的計劃再次被緩存並導致執行緩慢。

真正的問題是你爲什麼得不到很好的計劃開始嗎?我們可以進入冗長的技術和哲學論點,無論查詢處理器是否會創建一個不好的開始計劃,但事實是,當應用程序以某種方式編寫時,可能會發生錯誤的計劃。典型的例子是有一個where子句,如(@somevaribale is null) or (somefield= @somevariable)。最終99%的不良計劃可以追溯到開發人員編寫具有C風格程序期望的查詢,而不是基於聲音,基於集合的關係處理。

你現在需要做的是找出壞查詢。真的很容易,只需檢查sys.dm_exec_query_stats,不好的查詢將在total_elapsed_timetotal_logical_reads方面脫穎而出。一旦你確定了錯誤的計劃,你可以採取糾正措施,從查詢查詢。

+0

@Remus Rsanu:爲什麼這個「(@somevaribale爲null)或(somefield = @somevariable)。」導致問題? – 2010-08-17 18:22:55

+2

@Vash,不能使用索引,所以它掃描表。將該表與該表上的用戶交易結合起來,就可以阻止和等待。閱讀[Erlang Sommarskog在T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html),這裏是關於[「(@somevaribale爲null)或(somefield = @somevariable )。「](http://www.sommarskog.se/dyn-search-2005.html#OR_ISNULL) – 2010-08-17 18:26:58

+1

-1參數嗅探可能由默認值或非典型值選擇不當導致。並不是所有的開發人員都在使用SQL。我曾經能夠按需演示參數嗅探。現在,如果你在SQL Server開發團隊中,並且可以說你可以通過責怪開發者來捍衛你的產品。由參數嗅探*在現實生活中發生的錯誤計劃 – gbn 2010-08-17 18:38:07

4

與萊姆斯意見分歧......

參數嗅探允許SQL Server猜測最優規劃寬範圍的輸入值。有些時候,這是錯誤的,由於非典型價值或缺乏選擇,這個計劃很糟糕。

我以前可以通過在0和NULL之間更改默認值來按需演示:計劃和性能發生了顯着變化。

統計信息更新將使計劃失效。查詢將因此被編譯並在下次使用

的解決方法是其中的一個緩存如下:

  • 參數掩蔽
  • 使用OPTIMIZE FOR UNKNOWN提示
  • 複製「默認」

查看這些SO問題

現在,萊姆斯工程爲SQL Server開發團隊。然而,這種現象是深受微軟證明自己的網站,所以罵開發商是不公平的

+0

查詢不是錯誤的查詢 - where子句可以使用索引。 還有一點需要注意的是,這在登臺環境中不會發生。 – 2010-08-17 19:00:54

+0

@eggheaddesign:我同意。我提供3個永久修復... – gbn 2010-08-17 19:05:14

+0

謝謝。這是我們在英國睡覺的時間(我們的家鄉時間),所以我們會在早上看看你的修復情況 – 2010-08-17 20:39:06

相關問題