不久之前,筆者一個在企業中從事網管工作的朋友向我求助關于SQL Server服務器內存升級后遇到的問題。原來,他們企業準備上一個企業郵箱系統。為了節省開支,他們準備在原來的SQL Server服務器上部署企業的郵箱服務器。為了提高這個服務器的性能,讓其能夠承擔其兩種應用服務的重任,所以,他們對內存進行了升級。從原先的1G升級到了2G。
但是,內存升級完以后,郵箱應用服務的性能不但沒有改善,而且,還有惡化的趨勢。運行一段時間后,這臺服務器上運行的郵箱系統就出現了異常情況。時不時的會報出內存分配不足的情況。一開始,他們還以為是郵箱服務器跟SQL Server服務器不兼容。故還請了郵箱服務器的技術人員前來查看。經過他們的檢查,發現是SQL Server服務占用的大部分內存所導致的。SQL Server服務所需要的內存,從升級之前的600M左右一下子到了1.5個G。難怪郵箱應用服務要警報說內存不夠了。
一、原因分析。
筆者對這種問題已經是見怪不怪了,已經遇到過好幾次類似的故障。在SQL Server數據庫啟動的時候,數據庫系統會根據物理內存的大小來動態的增大或者縮小高速緩沖區的容量。這主要是為了提高SQL Server服務器的性能才如此的設計的。
我們知道,一般情況下,高速緩沖區越大,則SQL Server服務器的性能越好。這主要是因為有些用戶查詢過的數據都可以放在高速緩沖區(即內存的其中一部分)中。如此的話,當用戶下次再次需要這些數據的時候,就不用到硬盤中去讀取,而直接在內存中讀取即可。而從內存中讀取數據要比在硬盤中讀取速度要快的多。
所以,只要當服務器的可用內存在4MB與10MB之間的話,數據庫系統就會把它的高速緩沖區不斷的擴大。如此的話,當郵箱服務器突然需要用到比較大的內存,如對郵箱進行備份或者有用戶群發郵件的時候,就會報錯說“內存分配不足”。
故一般只是內存升級,往往不能夠解決SQL Server服務與其他應用服務搶占內存的情況。為了讓SQL Server能夠與其他應用服務友好的共處,數據庫管理員還需要對內存進行合理的分配,限制SQL Server數據庫服務內存的占用率。
二、解決方法。
針對他們企業的這種情況,筆者給出兩個建議。一是合理地給SQL Server數據庫分配內存。而是不要把SQL Server服務跟其他應用服務放在同一臺服務器上,畢竟數據庫服務的并發行訪問比較多,對服務器的性能要求比較高。
若果企業選擇第一種應對措施的話,就需要限制SQL Server服務器的內存使用率。為了使得運行在同一臺服務器的SQL Server服務器與郵箱服務能夠達到一個合理的性能,能夠和平共處,就需要采取一定的措施限制SQL Server數據庫服務的內存使用量。在SQL Server服務器中,專門提供了一個工具(數據庫引擎),可以用來幫助我們干預SQL Server服務器的內存分配。
具體的說,可以按如下方法進行配置。
第一步:打開SQL Server企業管理器。
在SQL Server數據庫中,提供了一個圖形化界面的企業管理器。在這個管理平臺上可以對SQL Server的大部分服務進行管理與配置。SQL Server數據庫服務的內存分配規則當然也不例外,可以在這里進行調整。
第二步:找到我們需要調整的服務器。
有些企業,可能在網絡中部署了多個SQL Server服務器。為了管理的方面,會在其中一臺服務器上的企業管理器中集中進行管理。不過,這家企業他們只有一個SQL Server服務器。在我們需要調整的服務器上,右鍵單擊,選擇“屬性”。然后就會彈出一個對話框。在對話框中選擇“內存選項卡”。在這里就可以對數據庫應用服務的內存分配方法進行設置。
第三步:調整相關的內存參數。
在這張選項卡中,一般有兩個參數,分別為最小服務內存與最大服務內存。在實際工作中,我們往往有兩種配置方法。
一是配置一個最大最小內存。即給SQL Server數據庫應用服務設置一個最大的使用內存。如此的話,在這個最大的范圍之后,數據庫系統會根據實際情況,在最大內存范圍之內對內存的分配進行調整。一般情況下,最小內存我們可以不設置,只對最大內存進行限制即可。這就給數據庫一種自主選擇的權利。可以提高內存的使用效率。
上一篇 創建Access2007表