![SQL Server 2008不斷讀取MDF文件,效能很糟糕](https://rvso.com/image/632763/SQL%20Server%202008%E4%B8%8D%E6%96%B7%E8%AE%80%E5%8F%96MDF%E6%96%87%E4%BB%B6%EF%BC%8C%E6%95%88%E8%83%BD%E5%BE%88%E7%B3%9F%E7%B3%95.png)
我們有一個在 VMWare ESXi 上執行的 Windows 2008 R2 虛擬伺服器後端執行 SQL Server 2008 R2 Express 的應用程式。用戶抱怨該應用程式非常慢。我看到非常高的磁碟 IO,這對我來說沒有意義。
背景:
- 平均磁碟佇列長度約為 60,最大值約 250
- 平均磁碟讀取/秒約 2000 次,最大值約 3500 次
- 資源監視器顯示 sqlservr.exe 正在以大約 40-60 MB/秒的速度讀取 .mdf 檔案(見下文)。寫IO非常低。
- .mdf 檔案只有 2 GB,這意味著整個檔案應該適合內存
- 伺服器具有 32 GB RAM,使用中的記憶體通常少於 16 GB
- 伺服器有 8 個 15k SAS 磁碟,採用 RAID10。這是一台配備 PERC H710 控制器的戴爾,能夠使用 SSD 來啟用 CacheCade(基於 SSD 的讀取快取),我很想嘗試一下,但似乎整個東西無論如何都應該緩存在 RAM 中,所以我我不確定這會有幫助。
- SQL VM 位於執行 VMWare ESXi 5 的 Dell 伺服器上。
- 此應用程式以前在獨立的 Windows 2003 伺服器上運行。我們升級到 Windows 2008 R2,同時也將應用程式升級到更新版本,因此可能是這些因素之一造成了影響。
有哪些選項可以更深入地研究這個問題?有沒有辦法查看 SQL Server 在幕後正在做什麼(正在執行哪些查詢等)?這種行為看起來正常嗎?我想知道是否有什麼配置不正確。
答案1
http://msdn.microsoft.com/en-us/library/cc645993(v=sql.105).aspx#Scalability
Espress 不會為 SQL 程序使用超過 1 GB 的 RAM。您需要購買並安裝至少 Web 或 Standard 才能使用超過 4 GB 的內存 - 它們都支援 64,這比您擁有的內存還要多,因此請選擇其中之一。
此外,成為 DBA 是一個相當深入的主題,但可以透過 Technet 和幫助文件輕鬆存取它。 「我如何知道正在執行哪些查詢」幾乎是第一天的主題(就像知道哪個版本適合給定任務一樣。)Profiler 甚至不適用於 Express,因此您會遇到困難您現在已配置完畢。
答案2
查看查詢詳細資訊 - 檢查具有高物理或邏輯 IO 的查詢,隔離它們,查看查詢計劃。我已經使用了像 2008 R2 這樣過時的版本很多年了... http://gallery.technet.microsoft.com/scriptcenter/Find-inefficient-query-88f4611f可能會給你一個開始。
我的指標是缺少觸發表掃描的索引。分析器和調整嚮導也可能有助於了解問題所在。如果 2008 R2 已經在管理器中提供了活動概述,那麼這將有一個很好的窗口,其中包含最昂貴的查詢。