天天看點

如何優化Windows OS使SQL Server性能最優化1.問題提出2.SQL Server獨享OS系統資源3.NTFS檔案系統4.系統設定5.安全6.尾聲

  這些天菜鳥又遇到麻煩事兒了。server team交給菜鳥的這批伺服器跑起sql server來老是不順暢。菜鳥情不至盡的想起了老鳥,于是,敲開了老鳥辦公室的門:

  “鳥哥,到底我們要如何定制化或者說如何優化我們的windows server os來使得我們的sql server達到最大程度的性能優化呢?”。老鳥還沒有反應過來,菜鳥劈頭蓋臉的問道。

  老鳥頓了兩秒,自信的回答道:“菜鳥,有進步啊,開始學會思考問題了。我們可以按照如下方法來優化我們的作業系統,使的sql server達到最大程度的優化。”。

  sql server做為資料存取的背景資料庫服務,注定了具有先天的i/o敏感型,cpu密集型的特點。是以,最好是将windows os盡可能多的資源都配置設定給sql server,以期望能夠擷取最優的資料存取性能。

  要想獲得最大的性能優化,sql server必須是獨享windows os系統資源的。這一點非常容易了解,sql server需要像是獨生子女家庭的孩子一樣,集萬千寵愛于一身,獨享os資源。

  試想一下,如果一個伺服器既提供dc服務,又提供ftp檔案下載下傳上傳服務,還要提供sql server的資料存取服務。那麼,dc和ftp服務勢必會與sql server争搶cpu,i/o,記憶體等系統資源。是以,sql server不可能取得最大的性能優化。

  基于上一小節的分析,我需要關閉sql server宿主伺服器上不必要的服務,以免造成和sql server資源的争搶。這些服務包含但不僅限于:

  iis、ftp、index service、messenger、microsoft searching等。如果已經安裝了這些服務,請将服務啟動修改為manual,以免服務開機自動啟動。

  關于windows平台檔案系統的選擇,我們一般選擇ntfs檔案系統。但,就ntfs而言,我們的版本選擇也有講究。

  2001年釋出的windows xp及以後的windows版本,引入了ntfs 5.0。我們有充足的理由選擇ntfs 5.0檔案系統,因為它比更早的ntfs 有一些新的性能增強點,比如:

  更少的磁盤通路來找到想要的檔案。

  總體更快的磁盤讀取速度。

  當然,如果你的産品環境sql server已經使用了ntfs 4.0格式化你的檔案系統,要想轉化為ntfs 5.0就會變得非常困難。但是,當你有新的sql server執行個體需要安裝時,建議你使用ntfs 5.0。以下是檢查ntfs檔案系統版本的方法,我的測試機是windows 7:

  ntfs 提供了檔案加密和資料壓縮的功能,雖然預設情況下新安裝的作業系統這兩項功能都是關閉的,但是,為了避免人為錯誤的開啟了這兩項功能,我們還是非常有必要重點審查這兩項功能。因為,這兩項功能涉及到資料加密、解密、壓縮和解壓縮,都屬于典型的i/o密集型和cpu密集型操作,而對于sql server而言,任何增加i/o和cpu消耗的行為對于sql server都是巨大的傷害。

  檢視ntfs是否關閉壓縮和加密功能:

  關閉ntfs壓縮和加密功能

  如果想要啟用加密和壓縮功能,請将1修改為0。

  由于windows os是面向所有應用程式開發的,雖然它具有對于sql server資料庫系統的自适應能力,但是,我們還是需要針對sql server資料庫資料存取服務的特點來定制化系統的一些設定。

  修改作業系統為最佳性能模式,節約一些不必要的性能開銷,方法如下:

start => run => systempropertiesadvanced => settings => adjust for best performance => ok => ok

如何優化Windows OS使SQL Server性能最優化1.問題提出2.SQL Server獨享OS系統資源3.NTFS檔案系統4.系統設定5.安全6.尾聲

  由于sql server是屬于資料存取的資料庫背景服務程式,是以,請将作業系統如何使用排程器的方法修改為background services。方法如下:

start => run => systempropertiesadvanced => settings => advanced => adjust for best performance of background services => ok => ok

如何優化Windows OS使SQL Server性能最優化1.問題提出2.SQL Server獨享OS系統資源3.NTFS檔案系統4.系統設定5.安全6.尾聲

  關于虛拟記憶體設定,其實存在很大的分歧。按照microsoft官方的解釋是建議sql server主控端虛拟記憶體為主機實體記憶體的1.5倍大小;如果sql server需要使用full-text元件,建議虛拟記憶體設定為實體記憶體的3倍大小;建議sql server的max server memory為實體記憶體的1.5倍大小。

個人對虛拟記憶體大小的建議持保留态度,兩點理由:

理由一:sql server max server memory如果是實體記憶體的1.5的話,sql server會盡可能多做資料緩存,當實體記憶體塞滿時,勢必會導緻虛拟記憶體的使用。由于虛拟記憶體實際上是将磁盤當着記憶體來使用,我們知道磁盤讀寫速度是遠遠低于記憶體讀寫的,哪怕是ssd。那麼,這個時候,資料庫會明顯的變慢,連接配接暴增,甚至會導緻服務挂起,最終導緻資料庫服務死掉。

理由二:1.5或者3倍實體記憶體空間的虛拟記憶體大小,導緻大量的磁盤空間浪費。因為,目前的伺服器動辄上100gb的記憶體已是家常便飯的事了,有的生産環境的伺服器已經達到256gb記憶體空間了,這樣的話,有378gb - 768gb的空間浪費,如果磁盤是ssd的話,浪費的成本很更高。

  個人對虛拟記憶體大小設定的建議是,使用windows性能螢幕觀察pageing file % usage計數器值一段時間(比如一天甚至一周,時間越長越準确),然後讓虛拟記憶體的最大值和最小值保持一緻,均設定為這個計數器的最大值再加上一個數字(比如10gb)。性能螢幕中計數器的添加方法如下:

如何優化Windows OS使SQL Server性能最優化1.問題提出2.SQL Server獨享OS系統資源3.NTFS檔案系統4.系統設定5.安全6.尾聲
如何優化Windows OS使SQL Server性能最優化1.問題提出2.SQL Server獨享OS系統資源3.NTFS檔案系統4.系統設定5.安全6.尾聲

  虛拟記憶體大小設定方法如下: start => run => systempropertiesadvanced => settings => advanced => change => custom size => set => ok。

如何優化Windows OS使SQL Server性能最優化1.問題提出2.SQL Server獨享OS系統資源3.NTFS檔案系統4.系統設定5.安全6.尾聲

  為了給sql server提供更好的系統記憶體優化,我們還應該限制系統使用檔案緩存的記憶體數量,來為sql server提供更多的系統記憶體。是以,請確定系統緩存政策為maximize data throughput for network applications,而不是maximize data throughput for file sharing。以下是windows server 2003的配置方法(windows server 2008的maximize data throughput for network applications屬性按鈕是灰色的):

start => run => control => network connects => local area connection => general => properties => file and printer sharing microsoft networks => properties => maximize data throughput for network applications

如何優化Windows OS使SQL Server性能最優化1.問題提出2.SQL Server獨享OS系統資源3.NTFS檔案系統4.系統設定5.安全6.尾聲

  以下是對四種系統緩存優化方案适用場景的解釋:

minimize memory used : 具有少量用戶端連接配接的伺服器;

balance : 多用途使用的伺服器優化。比如,提供檔案共享和列印服務的互動式工作站。

maximize data throughput for file sharing : 盡可能多的提供檔案和列印服務的專有伺服器。

maximize data throughput for network applications : 為擁有自己的記憶體緩存機制的分布式應用程式優化系統緩存,比如像微軟的sql server服務。

  這個組政策項比較有意思,雖然它與sql server系統性能沒有直接關系。但是,它關系着32位sql server是否有權限使用awe(address windowing extensions)。是以,它間接關系着32 位的sql server性能。

  請将lock pages in memory政策裡設定sql server啟動使用者擁有這個權限,否則,當我們啟用awe的時候,會報告如下錯誤:

  設定該政策的方法如下: start => run => gpedit.msc => computer configuration => windows settings => security settings => local policies => user rights assignment => lock pages in memory

如何優化Windows OS使SQL Server性能最優化1.問題提出2.SQL Server獨享OS系統資源3.NTFS檔案系統4.系統設定5.安全6.尾聲

  如果是單個sql server資料庫執行個體上建立過多的replication publication鍊,可能會遭遇如下的錯誤:

  這是因為sql server對replication釋出鍊使用的記憶體量有限制,我們通過修改系統資料庫的 [hkey_local_machinesystemcurrentcontrolsetcontrolsession managersubsystemswindows]鍵值來解決replication的問題。修改的方法是将sharedsection=1024,20480,768修改為sharedsection=1024,20480,2048

  關于安全,看起來好像和sql server性能沒有什麼直接的聯系。但是,我們反過來想,如果sql server成為黑客的“殭屍電腦”來随意使用的話,當然會浪費大量的性能開銷。

  microsoft windows作業系統或者sql server本身的service pack,要麼解決了性能問題,要麼解決了安全隐患,要麼就是一些bug fix。是以,新的service pack出來并且穩定以後,我們還是很有必要打上這些service pack的。

  最常見的情況是與存儲和網絡相關的驅動器會影響到sql server主機性能,進而影響到sql server的性能。是以,我們最好能夠周期性的檢查伺服器是否有最新,微軟認證的硬體驅動器。微軟認證這一點很重要,沒有通過認證的驅動安全性,穩定性很難保證。是以,為了系統性能和穩定性,我們需要耐心等待微軟認證的版本。至于檢查的方法,我們需要到供應商的官方網站去查詢或者開啟微軟更新服務。

  聽完老鳥的娓娓道來,菜鳥茅塞頓開,趕緊去試驗去了。