優(yōu)化SQLServer數(shù)據(jù)庫服務器內(nèi)存配置的策略
農(nóng)業(yè)銀行總行1998年以來正式推廣了新版網(wǎng)絡版綜合業(yè)務統(tǒng)計信息系統(tǒng),該系統(tǒng)是基于WindowsNT4.0平臺,采用客戶/服務器模式,以Microsoft SQL Server為基礎建立起來的大型數(shù)據(jù)庫應用程式,系統(tǒng)界面友好、操作簡便,計算、分析、檢索功能很強大,為確保農(nóng)業(yè)銀行系統(tǒng)及時進行縱向和橫向業(yè)務數(shù)據(jù)采集、按照不同需要生成統(tǒng)計報表,進行全面業(yè)務活動分析提供了強有力的保障。但在這套程式的推廣、維護中筆者發(fā)現(xiàn)系統(tǒng)有時運行速度較慢,特別是在Win95客戶端操作時尤為嚴重,經(jīng)過排除網(wǎng)線連接等硬件可能帶來的影響后上述問題仍然存在。筆者經(jīng)過仔細摸索,發(fā)現(xiàn)系統(tǒng)對硬、軟件的需要較高,為充分發(fā)揮設計效能,達到最好運作效果,需要對電腦硬、軟件系統(tǒng)進行較為完備的性能測試和最好配置,特別是內(nèi)存配置的好壞對系統(tǒng)的運行速度具備決定性的作用。下面,筆者就如何優(yōu)化SQLServer數(shù)據(jù)庫服務器的內(nèi)存配置提出一些認識和看法。
一、有關內(nèi)存的基本概念
1?物理內(nèi)存和虛擬內(nèi)存
WindowsNT使用兩類內(nèi)存:物理內(nèi)存和虛擬內(nèi)存。
物理內(nèi)存:作為RAM芯片安裝在電腦內(nèi)部的存儲器。
虛擬內(nèi)存:用于模擬RAM芯片功能的磁盤(硬盤)空間,其實質是通過將內(nèi)存中當前沒有使用的部分內(nèi)容臨時存儲到磁盤上,使系統(tǒng)能夠使用到比機器物理內(nèi)存更多的內(nèi)存。
2?分頁和分頁文檔
WindowsNT系統(tǒng)通過使用磁盤空間使得對內(nèi)存的需求得到部分緩解,從而使用到比物理內(nèi)存更多內(nèi)存的技術就稱為“交換”或分頁,也就是通常所說的虛擬內(nèi)存技術。通常Windows NT 4.0系統(tǒng)安裝時將在引導驅動器上配置一個大小為16MB的交換(分頁)文檔(pagefile.sys)。
二、優(yōu)化Windows NT 4.0系統(tǒng)內(nèi)存配置
在大多數(shù)情況下,為了充分發(fā)揮Windows NT 4.0系統(tǒng)效能,內(nèi)存的作用比起處理器的處理能力更具備影響力,特別是在客戶/服務器模式環(huán)境下更是如此,因為通常在這種環(huán)境下并不十分強調(diào)處理器的能力,相反卻十分注重是否采用足夠的內(nèi)存來滿足各個客戶的應用需要。此外,為了獲得容錯功能和保護應用程式,確保應用程式高速運行、充分發(fā)揮設計功能都需要有足夠多的內(nèi)存,特別是工業(yè)繪圖設計和各種工程應用程式更需要占用大量的內(nèi)存來進行復雜的計算。
物理內(nèi)存(RAM)方便快速的長處顯而易見,但由于其價格昂貴,也就不可能做到多多益善了,因此通過合理優(yōu)化內(nèi)存配置、擴充虛擬內(nèi)存提高電腦運算速度也就成了一項很重要的應用技術手段。
1?確保Windows NT系統(tǒng)基本內(nèi)存需求
Windows NT 4.0系統(tǒng)至小應配置12MB內(nèi)存,16MB內(nèi)存基本夠用,正常情況下確保NT系統(tǒng)有32MB內(nèi)存就能夠了,因為并不是任何的16MB基本內(nèi)存在任何時候都被同時使用。假如添加一些服務和應用程式,則對內(nèi)存的需求就會急劇增大。如:
(1)添加網(wǎng)絡服務需要4MB內(nèi)存空間;
(2)容錯功能和系統(tǒng)保護功能需要8MB內(nèi)存(如磁盤映像和分條功能);
(3)進行圖像圖象處理需要增加16MB內(nèi)存空間;
(4)安裝VC、VB研發(fā)系統(tǒng)需要增加16MB內(nèi)存空間;
另外,如在Windows NT上構建大型數(shù)據(jù)庫如SYBASE、Microsoft SQL Server等,對內(nèi)存的需求就更多了。
2?優(yōu)化內(nèi)存性能
為了使WindowsNT不至于過分占用較多的內(nèi)存或浪費處理器的時間用于換頁,能夠采用以下方法優(yōu)化內(nèi)存性能。
(1)減少顯示顏色的數(shù)量;
(2)降低顯示分辨率;
(3)盡可能不使用或使用位寬度較小的墻紙;
(4)關閉無需的服務程式或驅動程式,盡量不要在服務器上使用其他應用程式。
停用服務或驅動程式的操作步驟如下:
?、俅_定需要停用的服務或驅動程式的名稱;
?、趶?ldquo;控制面板”中雙擊“服務”或“設備”圖標;
?、墼诹斜碇羞x擇想要停用的服務或設備驅動程式的名稱,單擊“停止”按鈕,這時出現(xiàn)確認操作對話框; #p#page_title#e#
?、苓x擇“是”確認操作,然后關閉對話框完成配置。
3?優(yōu)化虛擬內(nèi)存
在對Windows NT虛擬內(nèi)存進行配置時需要合理確定各個驅動器分頁文檔的“起始大小”和“最大值”兩個參數(shù),他們用于指定分頁文檔的起始空間和最大空間。下面對這兩個參數(shù)作一些解釋:
起始大小:指初始創(chuàng)建該分頁文檔時的文檔大小,單位為MB,根據(jù)缺省配置,這個值被配置為系統(tǒng)中的物理內(nèi)存的大小。
最大值:指出該分頁文檔的最大尺寸,單位為MB。
(1)分頁文檔的配置原則:
?、俜猪撐臋n起始大小應保留缺省配置,一般情況下請不要改變;
②分頁文檔理想的最大尺寸為系統(tǒng)物理內(nèi)存尺寸的2.5倍至4倍。需要說明的是:假如系統(tǒng)工作時無需大量內(nèi)存,請選擇靠近下限的值,即用系統(tǒng)物理內(nèi)存的2.5倍作為這個尺寸的起始值;假如系統(tǒng)工作時需要大量內(nèi)存,請選擇靠近上限的值。
(2)Windows NT虛擬內(nèi)存配置步驟:
?、購?ldquo;控制面板”中雙擊“系統(tǒng)”圖標;
?、谠?ldquo;系統(tǒng)特性”對話框中單擊“性能”標簽;
③在虛擬內(nèi)存對話框中單擊“更改”按鈕,這時出現(xiàn)“虛擬內(nèi)存”對話框,上端的驅動器框逐一列出了 Windows NT任何頁面文檔的大??;
?、茉隍寗悠髁斜碇?,選擇需要配置分頁文檔的驅動器盤符,在“驅動器頁面文檔大小”對話框中列出了 “起始大小”和“最大值”兩個參數(shù)欄,填入按照上面的原則確定的數(shù)值;
?、輪螕?ldquo;配置”確認以上操作,然后依次單擊“確定”按鈕退出各個對話框,完成配置。
(3)Win95/98虛擬內(nèi)存配置。
Win95/98虛擬內(nèi)存配置方法、步驟和原則和Windows NT 4.0的配置大致相同,請參照上面Windows NT的配置。
4?注意事項
(1)合理確定分頁文檔的最大值,根據(jù)系統(tǒng)需求隨時進行調(diào)整,使用過多虛擬內(nèi)存將導致整個系統(tǒng)處理性能的下降。配置虛擬內(nèi)存最大值的目的是使用戶不必在WindowsNT的交換文檔上消耗過多的磁盤空間,通常情況下假如超過了系統(tǒng)需要的最好值后,生成交換文檔的磁盤空間就被浪費了。
(2)盡可能設立專用硬盤配置內(nèi)存交換區(qū),或將交換空間放到主硬盤的另一個分區(qū),同時應將主硬盤的交換文檔大小降至16MB,這樣主硬盤(分區(qū))僅用來放置操作系統(tǒng)和應用程式,就能夠減少交換次數(shù),防止頻繁交換耗費大量 CPU時間。
(3)虛擬內(nèi)存技術的確改善了Windows NT系統(tǒng)的性能,但也受到機器硬盤空間大小、硬盤速度、處理器 (CPU)速度的影響,從理想角度出發(fā),要提高電腦的性能就必須減少交換操作的次數(shù),但是沒有一個WindowsNT電腦不發(fā)生交換,這就需要電腦要有足夠的物理內(nèi)存,以保持最少的交換操作。
三、優(yōu)化Microsoft SQL Server數(shù)據(jù)庫內(nèi)存配置
內(nèi)存是影響Microsoft SQL Server系統(tǒng)性能的一個重要因素,SQL Server數(shù)據(jù)庫安裝時將為具備32MB物理內(nèi)存的機器缺省配置16MB可用內(nèi)存,16MB物理內(nèi)存的機器缺省配置4MB可用內(nèi)存。應在Microsoft SQL Server數(shù)據(jù)庫安裝后進行內(nèi)存選項(Memory)配置,最大配置值為2GB。
為了確定SQL Server系統(tǒng)最適宜的內(nèi)存需求,能夠從總的物理內(nèi)存中減去Windows NT4.0需要的內(nèi)存連同其他一些內(nèi)存需求后綜合確定,理想的情況是給SQL Server分配盡可能多的內(nèi)存,而不產(chǎn)生頁面調(diào)度。
1?根據(jù)物理內(nèi)存合理規(guī)劃SQL Server可用內(nèi)存
在大多數(shù)的生產(chǎn)環(huán)境中,服務器配備的物理內(nèi)存是64MB~128MB,偶爾也有256MB的,只要配置恰當是完萬能夠滿足SQL Server的內(nèi)存需求的。下表是筆者關于SQL Server內(nèi)存分配的建議規(guī)劃,供參考。
物理內(nèi)存 分配給SQL Server 配置值(單位:2KB)
8MB 4MB 2048
16MB 8MB 4096
32MB 16~18MB 8192~9216
48MB 28~34MB 14336~17408 #p#page_title#e#
64MB 40~46MB 20480~23552
128MB 100~108MB 51200~55296
256MB 216~226MB 110592~115712
512MB 464~472MB 237568~241664
以下是SQL Server內(nèi)存選項(Memory)配置方法
(1)從Microsoft SQL Server程式集中啟動SQL Enterprise Manager;
(2)從Server Manager窗口中選擇“Server”菜單選項;
(3)在“Server”菜單中選擇“Configurations”選項;
(4)在“Server Configuration”對話框中選擇”Configuration”標簽,Configuration窗口顯示配置選項列表;
(5)選中“Memory”項目,在“Current”欄填入新值;
(6)停止并重新啟動SQLServer服務,使配置生效。
2?合理擴充虛擬內(nèi)存、增大SQL Server可用內(nèi)存
當SQL Server系統(tǒng)確實需要擴大可用內(nèi)存時,應在磁盤空間充足的情況下擴充供虛擬內(nèi)存,并相應增大 SQL Server可用內(nèi)存。具體做法是,系統(tǒng)管理員首先擴充服務器的虛擬內(nèi)存,然后再參考上表增大SQL Server可用內(nèi)存,關鍵是要根據(jù)系統(tǒng)的負載情況綜合決定是否擴充內(nèi)存、優(yōu)化配置。
3?使用tempinRAM
SQL Server使用tempdb臨時數(shù)據(jù)庫作為一些查詢連接操作時排序或創(chuàng)建臨時表的工作空間。將tempdb創(chuàng)建在RAM中能夠使系統(tǒng)操作性能有較大提高,而且因為tempdb在每次重啟動服務器時都重建,這樣即使有非正常的關閉也是較為安全的,例如停電故障。要將tempdb創(chuàng)建在RAM中,能夠使用sp_configure進行配置,具體用法請參閱有關資料。
由于tempdbinRAM使用的內(nèi)存是由系統(tǒng)從內(nèi)存體單獨分配的,和SQL Server的內(nèi)存選項配置的可用內(nèi)存池是分開的,使用tempdbin RAM將減少整個系統(tǒng)的可用內(nèi)存,應根據(jù)SQL Server和服務器運行情況進行配置,否則就可能適得其反,影響系統(tǒng)性能。另外,適當增加tempdb數(shù)據(jù)庫空間,即使不使用tempdbin RAM,也能夠提高數(shù)據(jù)庫的運行速度。
4?注意事項
(1)建議在生產(chǎn)環(huán)境中SQL Server不要配置小于32MB內(nèi)存,而且數(shù)據(jù)庫服務器上盡量不要運行其他應用程式;
(2)擴充供虛擬內(nèi)存、增大SQL Server可用內(nèi)存,應考慮物理內(nèi)存使用狀況和磁盤空間許可情況;
(3)在可能的情況下,要為系統(tǒng)留有部分額外的內(nèi)存,這樣在服務器上打開一個服務或添加一個進程且不改變SQL Server內(nèi)存配置時,不致于使NT服務器的運行速度受到影響(變得很慢),一般認為最小為2MB最大為20MB。
四、巧用內(nèi)存配置,解決統(tǒng)計服務器問題
一單位的統(tǒng)計服務器投入使用后,運行速度較慢,經(jīng)排查原因,發(fā)現(xiàn)SQLServer中的內(nèi)存選項(Memory)僅為安裝缺省值——16MB(而服務器有128MB的物理內(nèi)存),在將內(nèi)存值調(diào)整為100MB時卻誤將其改成了 1000MB,使得SQL Server服務不能啟動,統(tǒng)計數(shù)據(jù)庫打不開,也就不能再次進入SQL Enterprise Manager修改內(nèi)存配置了。由于近期未備份業(yè)務數(shù)據(jù),不到萬不得已不能重裝SQLServer數(shù)據(jù)庫,就試圖用命令行參數(shù)命令來重新啟動SQL Server服務,但均不能奏效,陷入了困境。我們經(jīng)過仔細分析提出:既然SQL Server可用內(nèi)存配置值遠遠大于物理內(nèi)存,造成SQLServer服務不能啟動,何不擴充虛擬內(nèi)存呢?經(jīng)設法將機器虛擬內(nèi)存擴充至1000MB并重新啟動,SQL Server數(shù)據(jù)庫成功啟動,問題迎刃而解。
五、結束語
現(xiàn)在,大多數(shù)單位投入使用的Microsoft SQL Server數(shù)據(jù)庫服務器的物理內(nèi)存一般都在64MB以上,如農(nóng)業(yè)銀行省、市分行的統(tǒng)計服務器配備128MB物理內(nèi)存,只要按照上面提出的方法合理規(guī)劃、優(yōu)化NT和SQL Server的內(nèi)存配置,使配置盡可能達到最優(yōu),應用系統(tǒng)就一定能夠充分發(fā)揮設計功能、滿足業(yè)務需求