標籤:
原文: 第十七章——配置SQLServer(1)——為SQLServer配置更多的處理器
前言:
SQLServer提供了一個系統預存程序,SP_Configure,可以協助你管理執行個體層級的配置。微軟建議使用預設配置,但是基於不同的伺服器、不同負載的系統和你的用法,更改配置可能會給你的效能帶來好處。在32位和64位系統中,sp_configure會有一些差異。
我們經常見到SQLServer所在的伺服器上還包含了如IIS、檔案伺服器或者網域控制站這些服務或者功能。這些會影響你的效能甚至對正常運作有阻礙作用。
本系列文章將包含:
1、 為SQLServer配置更多的處理器。
2、 32位和64位系統中的記憶體配置。
3、 配置“對即時負載的最佳化”。
4、 最佳化SQLServer執行個體的配置。
配置SQLServer以使用更多的處理器:
今時今日的系統,資料庫變得越來越大。為了更快地從資料庫擷取資訊,僅靠管理你的資料庫並不足夠,還需要更多的CPU來處理。
不管你如何高效地維護索引和統計資訊,你都很難從一個使用低效CPU的SQLServer中獲得足夠好的回應時間。如何選擇合適的CPU用於資料庫的運作不在本系列的範圍之內,但是我們將示範如何使的你的CPU運作得更加強大和有效。
你是否曾經想過SQLServer在執行查詢的時候會使用多少個CPU?使用者經常希望通過購買更多、更快的CPU來加快SQLServer的運作,但是更重要的應該是關注在SQLServer在運行時需要用到多少個?
開始工作:
在開始深入之前,需要瞭解你的伺服器上有多少個CPU。可以使用一個SQLServer的DMV,sys.dm_os_sys_info來尋找這部分的資訊。這個DMV會嘗試返回關於電腦和關於資源消耗等方面的資訊:
SELECT cpu_count AS ‘Cores‘ ,--邏輯CPU總數 hyperthread_ratio--一個物理CPU的邏輯核心與物理核心的比FROM sys.dm_os_sys_info
步驟:
1、 為了設定在執行個體層級上執行查詢時用到的CPU數量,執行下面語句:
--0是預設值sp_configure ‘max degree of parallelism‘, 0 RECONFIGURE WITH OVERRIDE GO
2、 從語句層級去設定並行度的值,可以使用hint來實現,下面加上SETSTATISTICS TIME來看看不同的並行度的差異:
SET STATISTICS TIME ON SELECT *FROM Sales.SalesOrderDetailOPTION ( MAXDOP 1 )SET STATISTICS TIME OFF GOSET STATISTICS TIME ON SELECT *FROM Sales.SalesOrderDetailOPTION ( MAXDOP 0 )SET STATISTICS TIME OFFGO
下面是:
分析:
SQLServer 有很優秀的演算法體系去決定是否並行執行查詢。改寫SQLServer的決定需要經驗和專業知識。至於使用多少個CPU,這個比較確定的方法就是——實驗。
在步驟1中,使用SP_Configure預存程序來把最大並行度設為0,也就是預設值,這個值代表這SQLServer是否產生並存執行計劃,如果是,可以使用多少個CPU。如果你設定為4,SQLServer將使用4個核心來處理查詢,如果設為1,就不會發生並行度。
在步驟2中,使用OPTION來對特定查詢設定並行查詢。這裡有兩個SELECT語句同時執行。第一個查詢使用了MAXDOP =1,意味著不使用並行度執行查詢,而第二個查詢使用了MAXDOP =0,意味著由SQLServer自己決定是否使用並行度運行。
在加了SET STATISTICS TIME之後,可以看到每個查詢總共消耗了多少CPU時間。
擴充知識:
在生產環境中更改預設的最大並行度將會非常危險。所以儘可能保持現狀,如果你想修改,需要和你的上司或者同事商討。經驗表明,SQLServer並不總是為了單一查詢而使用所有CPU。除此之外,在OLTP系統中,不建議調整這個設定,但是在OLAP系統中,這卻是可以考慮的。
另外,如果你有16個核心,並把MaxDegree of Parallelism設為8,並不以為這隻有8個核心會用在SQLServer上,僅僅代表單一查詢不會使用超過8個核心而已,即使在並行運行,也如此。但是SQLServer依然會使用所有可用的核心。
第十七章——配置SQLServer(1)——為SQLServer配置更多的處理器