2011-02-28 49 views
2

我注意到我的數據庫的一些性能問題。這樣的查詢(僅舉例):奇怪的查詢性能的SQL Server 2005

SELECT * 
    FROM ActionHistory 
WHERE ObjectId = @id" 

...隨機地以不同的讀取和持續時間執行。 ObjectId是外鍵,帶有索引。

用我發現的SQL事件探查器,有時結果是:5次讀取,0持續時間,但在另一種情況下:5次讀取,200持續時間。如此大的持續時間偶然發生。

我使用WCF的分佈式事務。當我是當時唯一的用戶時,我得到了這樣的結果,所以它可能不會成爲鎖或其他東西。

這種行爲的原因是什麼:低讀取,但查詢時間長?

+1

首先,使用SQL分析器記錄XML查詢計劃並比較它們 – oryol 2011-02-28 16:44:26

回答

0

由於查詢每次完全一樣,且讀數相同,所以很可能是由於鎖定。有時候另一個查詢正在執行,並且可能會鎖定需要訪問的記錄。等待鎖定被釋放將導致放緩。

使用SQL事件探查器比較查詢的開始/停止時間,可以識別可能導致鎖定的重疊查詢。

這不是一個問題的表示,只是解釋你所看到的差異。

1

一般來說,分佈式事務是非常昂貴的。嘗試在您的環境中禁用分佈式事務以查看是否改變了任何內容。

0

數據庫啓用讀提交快照:

ALTER DATABASE ... SET READ_COMMITTED_SNAPSHOT ON; 

這將奇蹟般地改變你讀下默認讀提交的隔離發生到快照讀取,它不會被鎖阻礙。有關詳細信息,請參閱Choosing Row Versioning-based Isolation Levels,其中包括啓用快照讀取所導致的運行時資源使用情況。