1. 程式人生 > >第十七章——配置SQLServer(1)——為SQLServer配置更多的處理器

第十七章——配置SQLServer(1)——為SQLServer配置更多的處理器

前言:

        SQLServer提供了一個系統儲存過程,SP_Configure,可以幫助你管理例項級別的配置。微軟建議使用預設配置,但是基於不同的伺服器、不同負載的系統和你的用法,更改配置可能會給你的效能帶來好處。在32位和64位系統中,sp_configure會有一些差異。

        我們經常見到SQLServer所在的伺服器上還包含了如IIS、檔案伺服器或者域控制器這些服務或者功能。這些會影響你的效能甚至對正常運作有阻礙作用。

本系列文章將包含:

1、 為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.SalesOrderDetail
OPTION  ( MAXDOP 1 )
SET STATISTICS TIME OFF 
GO

SET STATISTICS TIME ON 
SELECT  *
FROM    Sales.SalesOrderDetail
OPTION  ( MAXDOP 0 )
SET STATISTICS TIME OFF
GO


下面是截圖:


分析:

        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依然會使用所有可用的核心。