[SQL]Disk 效能影響的相關注意事項

[SQL]Disk 效能影響的相關注意事項

上週參加集英信誠所舉辦的活動,當中有一堂課程是關於 SQL Server 2012 的效能調教的部分,當中講師所介紹的一些經驗,我把它和一些自己之前找到的相關資料,一併整理一下,這樣以後自己在處理問題上也比較容易查看。

 

硬體


  • 一般來言內建的儲存裝置,我們目前多半是採用 SATA 或 SAS 介面了,應該沒有甚麼主機在使用 IDE 或者是 SCSI 介面的硬碟了。而就介面的頻寬來說 SATA III 和 SAS 2.0 都是 6 Gb/s,而 SATA II 和 SAS 1.0 都是 3 Gb/s;而磁碟轉速上面來看,SATA II & III 多半轉速都是 7,200 RPM 或者是 10,000 RPM,而 SAS 1.0 和 2.0 的硬碟轉速則主要以 10,000 RPM 和 15,000 RPM 為主;而 SAS 硬碟更具有全雙工的特定,因此在效能的要求之下,我們都半在主機上都會採用 SAS 的硬碟為主。

 

 

NTFS


  • 由於 SQL Server 的一個 Page 是 8k,物件一次使用是一個 Extend,他是八個連續的 Page。因此如果把磁碟格式化也配合這樣的大小,將會有比較好的效能,此部分我們可以透過指令碼來做處理,範例是指定磁碟 X 的格式為 64K。
format E: /FS:NTFS /A:64K

 

  • 停用 MS-DOS 命名慣例,由於增加 8.3 檔名在 NTFS 磁碟分割上會降低部分效能,因此在 SQL Server 的環境上,最好是關閉 8.3 名稱建立,此部分可以透過 FSUtil 的工具程式,在系統管理員的身分權限來執行設定,語法為 「fsutil behavior set Disable8dot3 <磁碟代號> 1」。

image

  • 停用時間紀錄,由於在 NTFS 下每個檔案都有 Last Access Time 的屬性,而 SQL Server 的資料檔案當放在 NTFS 的目錄下,如果每次都讓 SQL Server 對檔案有寫入的時候都要再多去紀錄那些時間,也會對效能有些引響,因此建議在存放 SQL Server 資料檔的磁碟,最好是停用時間紀錄,此部分我們也可以透過 fsutil 來做設定,語法為「fsutil behavior set disablelastaccess 1」

 

其他設定


  • 有些時候會遇到部分 MIS 偏好使用防毒程式來減少中毒的狀況,但一般資料庫主機上也不適宜安裝其他東西,因此如果在 SQL Server 的主機,可以的話也許不要安裝防毒軟體,限制好 SQL Server 所能使用的防火牆 Port 應該就足夠了,但如果真的要安裝的話,記得把 SQL Server 存放資料庫檔案的目錄設定為排除掃描,這樣也可以避免因為防毒軟體拖累效能。

 

  • 如果啟動 SQL Server 的服務帳號是網域帳號或者是其他指定帳號時,要記得在「本機安全性原則」把啟動 SQL Server 的帳號加入「執行磁碟區維護工作」內的第一個帳號,避免因為優先順序的先後,造成 I/O Queue 的產生,此部分可以參考 Jason 的案例分享 ( http://www.dotblogs.com.tw/dotjason/archive/2012/05/19/72260.aspx )

image

 

 

另外在針對磁碟效能的部分,最近也聽到一些朋友說,把資料庫放在 SSD 上面,整個效能都變成飛快了,雖然也擔心 SSD 的使用壽命可能不如磁碟來的久,因此他預計把 SSD 當成消耗品,每兩年更換一顆。聽起來似乎也是個不錯的解決方式,在中小企業蠻多客戶其實資料庫也不大會超過 100GB,而利用 SSD 可以有效改善隨機存取的效能,再加上每天兩次的備份,就算這中間有甚麼狀況發生,最多也只是損失半天的資料,而且還不用花上太多的費用去做建置和改變,算是一種蠻另類的解決方案。