幾個月前,我編寫了一個應用程序,並將其託管在辦公室外的工作站上,該工作站配備 Intel Core 2 Quad Q8200 @ 2.33GHz、8 GB RAM、Windows Server 2008 Enterprise 和 SQL Server 2008 Enterprise。網路伺服器和資料庫伺服器都在同一台機器上運作。
我們的流量大量湧入,因此遷移了 ClubUptime.com,並獲得了 2 個頂級 Windows 虛擬機器。資料庫伺服器在 8 GB RAM 和 Intel Xeon e5620 @ 2.40GHz 上執行 Windows 2008 R2 Standard 和 SQL Server 2008 R2 Web。
自從切換以來,過去在 RAM 中運行大約 400MB 的資料庫現在運行在 4-7GB 左右,並且沒有任何變化(除了這裡那裡的幾列之外)。我們的流量增加了四倍,我們的資料庫在磁碟上有 6 GB,如果資料庫只有 6 GB,為什麼 SQL Server 會佔用 7 GB。
另一件事是,為什麼資料庫大小成長了 4 倍,記憶體佔用卻成長了 12 倍?
最後一個問題:為什麼 CPU 現在固定在 100%,而以前不是?設計很簡單,很少有連接,沒有子查詢。我只是不知所措,除非它是 SQL Server 版本,或者我從真實硬體轉移到虛擬機器這一事實。
答案1
SQL Server 將使用盡可能多的內存,因此除非有其他問題,否則我不會因記憶體佔用而損失太多睡眠。如果可以的話,它將儲存整個內容,RAM 總是比磁碟快,如果它不用於其他任何用途,那為什麼不呢。
在虛擬機器上執行 SQL 可能會出現問題。它工作得很好,但虛擬化會對效能造成影響,正如許多人在這裡評論的那樣,SQL 受此影響比大多數其他應用程式更嚴重。很大程度上也取決於您的VM實例- 如果Hypervisor是VMware vSphere主機,那麼如果它由Hyper-V支援並且爭用率很低(就像在非常非常少的VM中那樣),那麼它在同等實際資源下的效能會比Xen更好在主機上)那麼它會非常好。我唯一需要去虛擬化的系統都是 SQL 伺服器。
您沒有指定他們為您的虛擬機器提供多少個虛擬 CPU,我非常懷疑您是否獲得了 Xeon 5620 可以提供給虛擬機器的所有 8 個核心。即使您是這樣,這也可能不是最佳的。總體而言,該平台上具有4 個vCPU 的虛擬機器應該能夠與您之前的實體平台相匹配,假設Xeon 5620 的時脈頻率比您所使用的Core 2 Quad 高出約30%,但它是否真的取決於底層虛擬機器管理程式、主機系統設定以及同一虛擬機器管理程式上託管的其他虛擬機器的爭用程度。
您通常不能相信虛擬機器內的效能計數器,或至少不能相信它們會告訴您一切。您確實需要從虛擬機器管理程式的角度了解效能,以便判斷您的 VM 是否確實達到了系統上真實 CPU 容量的 100%。