你用安裝向導安裝了全新的SQL Server,最後你點擊了完成按鈕。哇噢~~~現在我們可以把我們的服務器進入生產了!抱歉,那並不是真的,因為你的全新SQL Server默認配置是錯誤的。
是的,你沒看錯:SQL Server的默認安裝在很多方面的配置是錯誤的。在今天的文章裡,我想給你展示下,為了更快的性能,在SQL Server安裝完成後3個你需要立即修改的配置選項。我們開始吧!
最大服務器內存(Max Server Memory)
免責聲明:如果這些天你在32位系統上運行你的SQL Server,請扔掉你的硬件,買個64位的系統,安裝64位的SQL Server,然後從這裡繼續讀。
現在在你面前你應該i有個64位的SQL Server。64位意味著你可以理論上訪問2^64的內存大小——那是16艾字節(10億GB)!因為這些巨量的內存,計算機供應商當前限制64位系統的地址總線“只有”48位——完全64位沒有真正意義。用48位的地址空間,你可以訪問256TB的內存——那還是大量的空間。
你可以使用最大服務器內存配置選項來配置SQL Server可以消耗的內存大小。下圖顯示的是在64位系統上SQL Server默認安裝後的配置選項。
從剛才的圖片你可以看到,SQL Server默認配置是可以消耗上至2147483647MB的內存——那是2千兆!嗯,用48位的地址總線我們只能物理訪問256TB的內存,現在SQL Server可以消耗上至2千兆的內存?這裡有什麼東西不對……最大服務器內存設置比32位最大整形值還大——2147483647。沒別的。因此SQL Server可以消耗比物理地址更多的內存?這是一個很不好的默認配置。SQL Server默認可以吃光你整個物理內存!
你總應該改變這個配置選項,這樣的話你可以給系統一些內存,讓它可以活著喘氣。一般來說(在服務器上沒有其它程序/進程)你應該系統至少10%的物理內存。這就是說你需要調低最大服務器內存設置。有64GB的物理內存我會配置最大服務器內存為56GB,這樣的話系統可以用剩下的8G來消耗和工作。
並行開銷閥值(Cost Threshold for Parallelism)
下一個你需要修改的配置選項是SQL Server處理並行開銷的閥值。並行意味著SQL Server能透過多個工作線程運行執行計劃裡的運算符。並行的目的是提高你查詢的吞吐量。SQL Server裡第1個影響並行的配置選項是所謂的並行開銷閥值:
這裡你配置的數字定義查詢成本,查詢優化器用它來找更便宜的並行執行計劃。如果找到的並行計劃更便宜,這個計劃會被執行,不然串行計劃會被執行。從剛才的圖你可以看到,SQL Server默認配置使用5的成本閥值。當你的串行計劃查詢成本大於5,然後查詢優化器再次運行查詢優化來找更便宜並行執行計劃的可能。
遺憾的是,5的成本值當下來說是個很小的數字。因此SQL Server太快嘗試並行你的執行計劃。當你處理更大的查詢並行才有意義——例如報表或數據倉庫情形。在純OLTP情形下,並行計劃象征著糟糕的索引設計,因為當你有缺失索引時,SQL Server需要掃描你的整個聚集索引(在與過濾(Filter)和剩余謂語(residual predicate)組合裡),因此你的查詢成本越來越大,它們穿過成本閥值,最後查詢優化器給你並行計劃。當人們看到並行計劃時,總會擔心!但問題根源是缺失非聚集索引。
對於並行的成本閥值,我總推薦至少20,甚至50。那樣的話,你確保SQL Server只為你對更大的查詢進行並行。即使在你面前有個並行計劃,你也應該考慮下可否通過增加一個支持的非聚集索引來是這個查詢成本更低。另外,CXPACKET並不象征著在你的系統裡你有並行問題!
最大並行度(Max Degree of Parallelism (MAXDOP))
當在SQL Server裡一個執行計劃進入並行,最大並行度定義了執行計劃裡每個並行運算符可用工作線程。下圖顯示了這個選項的默認配置。
如你所見,SQL Server使用默認值0。這個值意味著SQL Server嘗試並行化你的執行計劃穿過分配給SQL Server的所有CPU內核(默認情況所有內核都分配給SQL Server!)。你應該能看出這樣的設置沒有意義,尤其當你有大量CPU內核的系統。並行化本身帶來負擔,一旦你使用越多的工作線程,這個負擔越大。
一個建議是設置最大並行度為在一個NUMA結點裡擁有的內核數。因此在查詢執行時,SQL Server會嘗試在一個NUMA結點裡保持並行計劃,這也會提高性能。
有時你也會看到建議去設置最大並行度為1。這個是不好的建議,因為這個使你的“整個”SQL Server 單線程!即使維護操作(例如索引重建)已單線程執行,這會嚴重傷及性能!當然也有一些“獲獎”產品指示你使用1的最大並行度(MAXOP)……
將承載 SharePoint 數據庫的 SQL Server 實例的最大並行度 (MAXDOP) 設置為 1 以確保單個 SQL Server 過程能夠為每個請求提供服務。
小結
在你安裝完SQL Server後,DBA的真正工作才開始:你需要配置你的SQL Server安裝到你的硬件配置。在這篇文章裡你已看到,SQL Server的默認配置是明顯錯誤的。因此在安裝後立即修改一些配置選項非常重要。我已經見過生產環境裡SQL Server使用我這裡提到的默認選項,因為它們“稍後“會被配置,“稍後”就從未發生了……
因此今天請幫自己一個忙,為最大性能和吞吐量配置你的SQL Server!
精彩專題分享: SQL Server安裝教程手冊
讀完這篇文章是不是大家都已經行動啦,快點去完善你的SQL Server數據庫吧!