我在SQL Server 2005上的一個非常小的表(< 10行,5列)上運行一個非常簡單的查詢,通常它會立即返回結果,但有時需要很長時間才能完成(如5-10s)。我知道,我們的服務器負載很重,這可能是原因(因爲我不認爲它可能會發生,因爲鎖 - 沒有人寫入該表) - 但我需要以某種方式找到瓶頸。SQL查詢在隨機時間很長
關於如何才能找到確切的服務器資源,這使得這樣簡單的查詢運行這麼久的任何建議?
我在SQL Server 2005上的一個非常小的表(< 10行,5列)上運行一個非常簡單的查詢,通常它會立即返回結果,但有時需要很長時間才能完成(如5-10s)。我知道,我們的服務器負載很重,這可能是原因(因爲我不認爲它可能會發生,因爲鎖 - 沒有人寫入該表) - 但我需要以某種方式找到瓶頸。SQL查詢在隨機時間很長
關於如何才能找到確切的服務器資源,這使得這樣簡單的查詢運行這麼久的任何建議?
你需要的唯一東西就是分析。您需要了解內存,輸入/輸出和處理器。您需要知道這三個中的哪一個導致服務器變慢。有很多產品可以做到這一點(甚至還有一個安裝了Windows的性能監視器)。
不要「想」它,你需要看到數據以瞭解基本問題。
在SSMS中,在對象資源管理器中右鍵單擊連接的服務器,然後選擇活動監視器。
在那裏您可以看到最近昂貴的查詢和其他性能數據。
除了運行探查,並檢查page life expectancy
也buffer cache hit ratio
參見:Use sys.dm_os_performance_counters to get your Buffer cache hit ratio and Page life expectancy counters
它也可以(但你必須測試)是什麼情況是,你正在尋找得到了圈外的數據在RAM緩存,現在它已經從磁盤獲取它,這將需要更長的時間,當你以後再運行它第二次將再次快速
您可以通過統計運行檢查IO ON
SET STATISTICS IO ON
select * ..your query
是
你應該看到類似的東西
Table'TableNAme'。掃描計數1,邏輯讀取4,物理由從RAM丟棄數據讀取2
如果看到physical reads
高於0,它抓住它從磁盤
可以驗證這一點(未生產)
DBCC freeproccache
DBCC DROPcleanbuffers
現在當你運行一個查詢兩次,你會看到這樣的事情,第一次運行時會從盤,第二從RAM
Table'TableNAme'。掃描計數1,邏輯讀取4,物理讀取2
表'TableNAme'。掃描計數1,邏輯讀取4,物理讀取0
您可以監視SQL Server正在使用的客戶端連接數嗎?也許某些最大限制正在受到打擊,所以傳入的客戶端連接必須等待現有連接才能獲得釋放,通過超時。 – 2011-04-07 13:59:53
你發現了什麼是瓶頸嗎? – broadband 2015-11-19 18:15:36