調整Windows參數提高SQL Server性能
2024-08-31 00:53:10
供稿:網友
 
SQL Server數據庫與Windows操作系統來自同一個家庭,在技術上具有一定的共通性。我們可以調整Windows操作系統的一些參數來提高SQLServer數據庫服務器的性能,使之更高效的運行。
  一、 提高虛擬內存來提高數據庫服務器性能。
  虛擬內存簡單的來說就是內盤中的一塊空間。當物理內存不夠時,操作系統會自動把某些駐留在內存中暫時不用的內容移植到這個在硬盤上的虛擬內存中,以釋放更多的空間給新的應用程序使用。也就是說,當物理內存使用完時操作系統會拿出一部分硬盤空間來充當內存使用,以緩解內存的壓力。為此從某種程度來說,這個虛擬內存的設置也會影響到數據庫服務器的性能。那么這個虛擬內存到底該設置多少為好呢?這沒有一個固定的標準。這需要數據庫管理員根據部署的應用來確定。
  如數據庫沒有一些高級的應用,如數據倉庫、全文索引或者不適多個應用服務一身的話,筆者認為只要把虛擬內存設置為物理內存的1.5倍即可。但是,如果在數據庫服務器上配置了數據倉庫或者全文索引的話,則這個1.5倍的虛擬內存往往是不夠的。此時筆者建議需要把虛擬內存配置為物理內存的3倍到四倍。同時,需要調整數據庫中的最大服務器內存選項,將其設置為物理內存的1.5倍。也就是說,其在使用內存的時候,可以使用虛擬內存大小的一半。注意這個設置時必須的,否則的話,調整數據庫虛擬內存很難起到應有的效果。而且當以后內存升級了,則也需要同時更改這個兩個參數。
  最后需要說明的一點就是,虛擬內存并不是越大越好。如果設置為10倍、20倍,那么這是浪費。以往內存中沒有這么多的內容可以往虛擬內存中存放。所以,針對SQL Server數據庫與Windows服務器來說,4倍于物理內存的虛擬內存已經足夠了。設置的再大的話,就沒有多少的實際意義了。
  二、 調整本地客戶端的任務優先級。
  在數據庫初始化的過程中,有大部分的任務需要在本地客戶端上完成。即時在后續維護中,出于某種原因仍然要在本地客戶端上操作。那么什么是本地客戶端呢?其實本地客戶端就是跟數據庫服務器部署在同一臺計算機上的客戶端。如我們在導入期初數據的時候,為了方便會在本地客戶端上直接進行操作。因為這可以節省數據在網絡上傳輸的時間。
  不過在本地客戶端上進行操作的時候,往往分為前臺運行與后臺運行。操作系統這么設計的本意是為了提高遠程客戶端的執行效率。如在遠程客戶端生成物料需求計劃的時候,由于運算量比較大,其花費的時間可能比較久,如可能需要20分鐘。為了提高工作效率,對于類似的作業,應用程序可以把這個運算放置在后臺運行。不過需要注意的是,把某個作業放置在后臺運行,并不能夠節省其運行的時間,而往往由于放置在后臺的作業其優先級比較低,往往實際花費的時間還會延長,如會延長到23分鐘等等。之所以要把這個長時間運行的作業放置在后臺,主要是為了讓用戶不用干等,可以先作其他事情。等到運行完成后,系統會自動把相關的結果返回給用戶。這在感覺上是縮短了運行的時間(往往在等待的過程中時間過得特別慢),而實際上其運行的時間根本沒有縮短,甚至會更長。
  這個處理策略對于遠程客戶端來說確實有用,至少可以在感覺上縮短用戶的等待時間。而且可以讓用戶先進行其他的操作。但是如果在本地客戶端上,處理某些作業的時候,可能并不希望如此。如在本地客戶度進行物料需求計劃測試,數據庫管理員希望即時把這個計劃放置在后臺運行,其也能夠與前臺應用程序具有相同的優先級,以減少這個處理時間。所以,當數據庫管理員遇到類似情況時,就需要調整操作系統的相關設置,讓作為在后臺運行的應用程序,也能夠與前臺運行的其他應用程序具有相同的優先級。
  通常情況下,安裝完干凈的SQL Server數據庫時,服務器任務調度設置為“務”,即前后臺應用程序沒有優先級的分別。也就是說,此時將為前臺應用程序與后臺應用程序提供相等的處理時間。但是有時候為了兼顧遠程客戶端,在部署實例的時候,會改變這設置。如把降低后臺應用程序的優先級,讓更多的資源能夠服務于前臺應用程序。在大部分情況下,這個設置是必要的。不過如果出于某些原因需要在本地客戶端執行某些操作的話,則數據庫管理員需要暫時調整這個配置,以節省某些作業的運行時間。有時候甚至可以將服務器任務調度設置為最大或者應用程序,這就可以為前臺應用程序提高最大的處理器時間。
  可見,任務調度計劃設置也沒有一個統一的優劣標準。主要還是需要看數據庫服務器到底用來做什么?為此這也對數據庫管理員提出了比較高的要求。此時數據庫管理員必須要理解各種優先級設置對于數據庫服務器性能的影響。然后再根據當時的實際應用來合理的調整任務級別的優先級,以取得本地客戶端操作的最大性能。
  三、 限制系統內存用戶文件緩存的大小。
  毋庸置疑,數據庫服務器的物理內存對于數據庫的性能具有至關重要的影響。但是有時候我們會發現一個奇怪的現象,即即時增加了數據庫服務器的物理內存,但是仍然沒有發現數據庫的性能有很大的改善,或則說比原先的還要差一點。這是什么原因呢?如結合SQLServer數據庫來說,這主要是內存的分配不是很合理。如大部分的內存被用來存放文件緩存。此時如果增加的內存都被用來存放文件緩存了,那么光靠簡單的增加內存并不能夠提高數據庫的性能。所以,有時候我們數據庫管理員需要優化SQL Server服務器的內存使用情況,如需要限制用戶文件緩存的內存量。
  那么該如何限制呢?這不是SQLServer數據庫服務器來完成的,而是需要通過Windows操作下系統的配置來實現。如要限制文件系統緩存,需要確保沒有選擇“最大化文件共享數據吞吐量”這個選項(其原來是為文件共享所準備的),然后選擇“最小化使用對內存”或者“平衡”選項,來制定最小文件系統緩存。
  具體來說,可以按如下步驟來調整這個選項,以提高服務器的性能。首先,依次打開控制面板、選擇網絡連接、單擊本地連接。然后打開常規選項卡,選擇屬性。在本地連接屬性對話框中選擇常規選項卡,選擇微軟網絡的文件和打印機共享,并單擊屬性。在彈出來的對話框中,去掉“最大化文件共享數據吞吐量”選擇,可以選擇“最大化網絡應用程序的數據吞吐量”。然后按確定即可。如此操作系統就會自動調整內存的分配,不會給文件緩存保留很大的空間,從而可以提高數據庫內部處理的性能。往往這對于事務性的應用系統很有作用,能夠在很大程度上提高數據庫的性能。
  不過在調整這個配置后,如果在站臺服務器上還部署有文件服務器的話,那么這個文件服務器的性能就會受到比較大的影響。因為對于文件服務器應用來說,需要比較大的文件緩存量。為此在某種程度上來說,數據庫服務器與文件服務器在這方面是相互沖突的。數據庫管理員就需要相互權衡,然后確定一個最佳的處理方案。不過一般情況下,不建議將數據庫服務器與文件服務器、打印服務器等等部署在同一個服務器上。因為這三種不同的應用,彼此之間的資源爭用還是很厲害的。為此會給數據庫的性能帶來比較大的負面影響。
  如果光從數據庫服務器來說,限制文件緩存的內存使用量,確實可以提高數據庫服務器的性能。特別是對于某些特別的應用與計算,由于需要用到比較大的內存,故可以大幅度提高這些作業的運算量。
  可見我們在優化數據庫性能的時候,有時還不能夠光從數據庫服務器著手。必要的時候,我們需要換一個角度,從操作系統出發,調整操作系統的相關配置,也能夠明顯的提高數據庫的性能。