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。
起初懷疑是硬碟不夠快,所以create 24G的data file把時間拖長了。於是執行大檔案copy以比較兩台機器的硬碟I/0,卻發現並沒有太大差異。
Server A:
Server B:
此段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啟動帳戶更改為本機系統帳戶:
(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服務帳號
(2.4) 重啟MSSQL服務
再次執行sql statement,果真就快多了:
Server A |
Server B |
|
執行 sql |
7秒 |
8秒 |