天天看點

SQL Serve裡你總要去改變的3個配置選項

你用安裝向導安裝了全新的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 Serve裡你總要去改變的3個配置選項

從剛才的圖檔你可以看到,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 Serve裡你總要去改變的3個配置選項

這裡你配置的數字定義查詢成本,查詢優化器用它來找更便宜的并行執行計劃。如果找到的并行計劃更便宜,這個計劃會被執行,不然串行計劃會被執行。從剛才的圖你可以看到,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 Serve裡你總要去改變的3個配置選項

如你所見,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!

感謝關注!

參考文章:

https://www.sqlpassion.at/archive/2015/02/23/the-3-configuration-options-that-you-always-have-to-change-in-sql-server/

注:此文章為

WoodyTu

學習MS SQL技術,收集整理相關文檔撰寫,歡迎轉載,請在文章頁面明顯位置給出此文連結!

若您覺得這篇文章還不錯請點選下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!

繼續閱讀