SQL Server應用程序性能調優之硬件配置
當應用程序性能出現問題時,服務器硬件通常會背上黑鍋,人們想到的往往是如何優化服務器的硬件。實際上恰恰相反,多數情況下,硬件并非導致性能問題的罪魁禍首。對于基于SQL Server的應用程序的性能和升級,服務器硬件所起的影響要遠比人們想象的小。
多數應用程序運行緩慢的原因是因為其糟糕的前期設計,而并非硬件性能不夠。硬件通常被冠以惡名的原因是,在應用程序運行緩慢之前,性能問題通常不是那么顯而易見。而且應用程序的設計不是說改就改的,人們解決性能問題最簡單直接的辦法就是提高其硬件性能。雖然這種辦法也有一定效果,不過它不能真正完全解決問題,這也是為什么人們常常將性能低下歸結為硬件問題的原因。雖然硬件有時候確實會導致性能問題,但多數情況下它卻不是主要原因。
為了防止你的服務器硬件給SQL Server應用軟件拖后腿,首先讓我們簡單看一下一些常見的硬件選擇和調優問題。
選擇硬件
為你的SQL Server應用選取最佳硬件要參照很多因素,諸如數據庫的規模、用戶的數量,數據庫被使用的方式(OLTP或OLAP)等等。雖然沒有成功的公式來估算服務器硬件需求,最好的辦法就是在開發階段提前開始測試你的應用。盡管許多有經驗的DBA可以對你所需要的最佳硬件給出合理的估測,只有通過實際的測試才可確信滿足你的應用需要的硬件是什么。
在考察服務器硬件時,需要牢記以下硬件選擇方面的事項:
CPU:要購買可以擴展CPU數量的服務器。例如,通過測試結果你認為單CPU服務器就夠用,那么你應該購買具備至少兩個CPU安裝空間的服務器,哪怕現在空著另一個CPU插槽的位置。預留下將來升級擴展的空間。
內存:它可能是對SQL Server的性能影響最大的硬件部分。理想情況下,你的整個數據庫應該可以fit into內存。不幸的是,這一般是不可能的。最低要求是,內存的大小應該能夠容納你的數據庫中最大表,如果經濟上可以接受,為服務器配備其能夠支持大小的內存,換句話說,內存多了沒壞處。
I/O子系統:它對SQL Server性能的影響僅次于內存,也非常重要。最低要求是,使用硬件RAID系統來運行你的數據庫。大概來說,你應該購買多個小硬盤,而不是一個大硬盤。在陣列中的硬盤數量越多,就可以獲得更快的I/O。
網絡連接:在你的數據庫服務器上,至少應該有一個百兆網卡,而且它應該連接到一個交換機上。理想情況下,服務器應該有兩塊網卡,通過全雙工方式連接到交換機。
調優服務器
如果沒有正確的配置和優化,最貴的服務器硬件未必具有最好的性能。我曾經遇到過很多硬件相關的性能問題,其多數原因是驅動未正確安裝。這些硬件性能相關的問題中很多往往難于跟蹤和解決。一般來說,應該讓一個有經驗的技術高手來確保硬件被正確安裝和配置。然后,在該服務器被用于生產環境之前,在一定條件下測試你的應用程序,以發現潛在的性能問題。另外,你的操作系統也必須被正確的配置,這涉及到很多方面,在這兒無法具體介紹。
為了在一個服務器獲得最好性能,SQL Server應該獨享一臺服務器,而不應該同時還安裝其它管理工具。不要為了省一點錢而將你的IIS或MTS服務器與SQL Server安裝在同一臺服務器上。這不僅僅會影響SQL Server的性能,而且使得性能調優和故障排查工作非常難于進行。
優化SQL Server配置
調優SQL Server的另一個常見誤解是,為了獲得最佳性能你必須定制優化它的多處配置。對于一些早期版本的SQL Server來說,這種做法或許有一定道理,但是對于最近版本的SQL Server,配置通常已經不再是一個問題,當然對于那些超大、超忙碌的服務器來說或許是另外一種情況。
多數情況下,SQL Server可以自我調優。也就是說,SQL Server可以檢查自己運行的任務,然后自動進行內部調整,以使指定任務獲得盡可能高的性能。
當你對SQL Server進行性能測試時,需要牢記SQL Server需要花一點時間來將自己調整到最優化。換言之,啟動SQL Server服務后你立即獲得的性能,與在有負載情況下運行幾個小時后的SQL Server的性能是不相同的。因此在進行測試之前,要讓SQL Server有一定時間來適應你的負載。
通過企業管理器,或者sp_configure存儲過程,你可以修改36個SQL Server配置選項。如果你沒有調優SQL Server的豐富經驗,我不建議你修改任何SQL Server的設置。如果你是一個新手,你所做的修改往往會適得其反,會降低SQL Server的性能。因為一旦修改了SQL Server的設置后,會使其喪失其自我調優的能力。
如果經過深思熟慮后,你仍然認為修改一個或多個SQL Server配置可以提高其在特定環境下的性能,那么你應該穩妥謹慎的來對其進行修改。在你修改設置前,首先應通過諸如性能監視器之類的工具來了解當前SQL Server的性能,以其作為基準。每次只進行一處修改。不要一次進行多個修改,因為這樣你無法明確每一個設置帶來了性能上的什么變化。
在進行了一處修改后,再次在相同負載下測量SQL Server的性能是否真正有所提高。如果沒有,那么恢復到默認設置。如果的確有提高,再繼續檢查性能在其它負載下是否也會提高。通過后期測試,你或許會發現你的修改在某些負載下可以提高性能,但在其它負載下卻會降低性能。這也是為什么我不推薦你修改多數設置的原因之一。
一般來說,如果你的SQL Server應用程序遭遇到了性能相關問題,通過修改SQL Server設置方法解決這些問題的可能性非常小。
關鍵字:SQL Server應用程序性能調優
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解