[MSSQL 2008] Create DataBase 過慢問題

MSSQL Create DataBase過慢問題

 

客戶準備了二台Virtual Machine安裝MSSQL,規格如下:

 

Server A

Server B

OS Version

Windows Server 2003 Enterprise X64

SP2

Windows Server 2003 R2

Standard X64

SP2

OS CPU

2.31GHz

2.6GHz

OS Memory

15.7G

8G

SQL Edition

Server 2008 (SP1)

Standard Edition (64-bit)

Server 2008 (SP1)

Standard Edition (64-bit)

Location

台灣

美國

 

同樣一段sql statement(含create 24G Database / create table / create stored procedure/ exec stored procedure)分別在二台機器上執行,執行的時間相差了近13倍:

 

Server A

Server B

執行 sql

110秒

8秒

 

從Task Manager監看CPU及Memory的使用率都很低,此段sql statement幾乎不太吃memory及CPU。

clip_image002

起初懷疑是硬碟不夠快,所以create 24G的data file把時間拖長了。於是執行大檔案copy以比較兩台機器的硬碟I/0,卻發現並沒有太大差異。

Server A:

clip_image004

Server B:

clip_image006

 

此段sql statement在我自己爛爛的實體機上執行,不過也才6~8秒。縱使在VMware上的效能會差些,也不致於相差13倍吧! 難道會是VMware版本不同所導致嗎?

 

Server A

Server B

VMware

3.5

4.01

 

可惜台灣客戶端沒有VMware 4.01的版權,所以僅能在3.5的版本上胡亂測試。

先後測過了MSSQL 2008 Enterprise Edition / MSSQL 2008 Standard Edition / MSSQL 2005 Standard Edition。執行sql statement的時間仍舊都需110秒左右。

就連最後客戶提供了實體機器安裝MSSQL 2008 Standard Edition後測試,居然要花上7~8分鐘!! 不得不懷疑客戶的機器是不是都卡到了什麼東西 >”<

後來請server team的人將硬碟格式化的大小從4k調為64k後再測試,執行時間約78秒,是有進步了點但不夠好啊!接著發現Server B 裡MSSQL啟動帳戶用的是本機系統帳戶;而Server A 用的是NETWORK SERVER帳戶。問題終於找到了根因了,原來是因為MSSQL的服務帳戶沒有SE_MANAGE_VOLUME_NAME 權限。錯怪VMware了 …

 

參考msdn文件http://msdn.microsoft.com/en-us/library/ms175935.aspx說明後,

解決的DB初始化過慢的方法可以有下列二種方式:

(1) 將MSSQL啟動帳戶更改為本機系統帳戶:

clip_image008

 

(2) 或是授與MSSQL服務帳戶SE_MANAGE_VOLUME_NAME 權限。

    (2.1) 開始 -> 執行 -> gpedit.msc ,啟動Group Policy Object Editor

    (2.2) Local Computer Policy -> Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment

    (2.3) 雙擊Perform volume maintenance tasks後,加入MSSQL服務帳號

clip_image010

    (2.4) 重啟MSSQL服務

 

再次執行sql statement,果真就快多了:

 

Server A

Server B

執行 sql

7秒

8秒