不久之前筆者一個在企業中從事網管工作的朋友向我求助關於SQL Server服務器內存升級後遇到的問題原來他們企業准備上一個企業郵箱系統為了節省開支他們准備在原來的SQL Server服務器上部署企業的郵箱服務器為了提高這個服務器的性能讓其能夠承擔其兩種應用服務的重任所以他們對內存進行了升級從原先的G升級到了G
但是內存升級完以後郵箱應用服務的性能不但沒有改善而且還有惡化的趨勢運行一段時間後這台服務器上運行的郵箱系統就出現了異常情況時不時的會報出內存分配不足的情況一開始他們還以為是郵箱服務器跟SQL Server服務器不兼容故還請了郵箱服務器的技術人員前來查看經過他們的檢查發現是SQL Server服務占用的大部分內存所導致的SQL Server服務所需要的內存從升級之前的M左右一下子到了個G難怪郵箱應用服務要警報說內存不夠了
一原因分析
筆者對這種問題已經是見怪不怪了已經遇到過好幾次類似的故障在SQL Server數據庫啟動的時候數據庫系統會根據物理內存的大小來動態的增大或者縮小高速緩沖區的容量這主要是為了提高SQL Server服務器的性能才如此的設計的
我們知道一般情況下高速緩沖區越大則SQL Server服務器的性能越好這主要是因為有些用戶查詢過的數據都可以放在高速緩沖區(即內存的其中一部分)中如此的話當用戶下次再次需要這些數據的時候就不用到硬盤中去讀取而直接在內存中讀取即可而從內存中讀取數據要比在硬盤中讀取速度要快的多
所以只要當服務器的可用內存在MB與MB之間的話數據庫系統就會把它的高速緩沖區不斷的擴大如此的話當郵箱服務器突然需要用到比較大的內存如對郵箱進行備份或者有用戶群發郵件的時候就會報錯說內存分配不足
故一般只是內存升級往往不能夠解決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數據庫應用服務設置一個最大的使用內存如此的話在這個最大的范圍之後數據庫系統會根據實際情況在最大內存范圍之內對內存的分配進行調整一般情況下最小內存我們可以不設置只對最大內存進行限制即可這就給數據庫一種自主選擇的權利可以提高內存的使用效率
二是固定內存分配即把最小服務內存與最大服務內存兩個參數設置為相同如此的話不管數據庫服務需要多大的內存在服務器啟動的時候操作系統都會給其預留這麼大的內存其他的應用程序及時內存再怎麼不足也不會跨越數據庫的內存領地很明顯這種方式雖然保證了數據庫服務的內存需求但是內存的使用率並不是很高
針對上面兩種方法筆者比較傾向與使用第一種配置即只對數據庫應用服務的最大內存使用率進行限制只要不超過這個范圍則服務器可以自主的進行調解那麼這個最大的使用率設置成多少合適呢?這主要要看企業所部屬的服務了由於這家企業在同一台服務器上運行了郵箱服務器與數據庫服務器可能對硬件的壓力比較大因為這兩個應用服務都涉及到比較多的並發訪問所以即使把硬件升級成了G估計也不能夠給數據庫服務分配比較多的內存一般來說並發性訪問越多則最好能夠給其配置比較多的內存
配置完成之後不用重新啟動這個規則就會起效不過筆者還是建議把SQL Server服務重新啟動一下在可以的情況下把服務器重新啟動一下最好如此的話操作系統就會根據這個規則對內存進行重新的調整分配也可以讓SQL Server服務器更好的隊內存進行合理的安排如可以把SQL Serve可用內存固定在一個連續的區域內以提高數據庫的性能
三總結
針對這個內存升級後所產生的煩惱筆者有幾句話說
一是硬件升級只是數據庫服務器性能提升的一個充分條件而不是必要條件也就是說硬件的升級並不一定會導致服務器性能的提升在硬件升級的同時往往也需要調整相關的配置讓硬件升級的優勢得到極大的發揮筆者認為有時候服務配置比純粹的硬件升級更加重要一些經驗不足的網絡管理人員只知道升級硬件而忽視了服務的調整配置他們這是走進了一個死胡同效果往往不能夠達到他們的預期
二是一些並發性比較大的應用服務器最好不要放在同一個服務器上現在企業基於服務器客戶端模式的管理軟件應用越來越多這種模式一個顯著的特點就是並發性訪問比較頻繁給應用服務器帶來了很大的壓力在一些性能要求比較高的企業它們把數據庫與前台的應用程序服務器都分開放置以求優化服務器的性能而且現在服務器價格已經逐漸能夠被企業所接受筆者認為企業沒有必要在這方面省錢若多個應用服務並發性訪問比較多的情況下則最好考慮把他們部署在不同的服務器上以提高各個應用服務的性能
三是在同一個服務器上部署多個應用服務的話要考慮應用服務的穩定性因為像這家企業在同一個服務器上部署數據庫與郵箱服務器筆者並不是很贊同因為郵箱服務器是一個比較容易遭受到攻擊的服務器垃圾郵件病毒郵件等等都可能導致服務期運行不正常把郵箱服務放在SQL Server數據庫服務旁邊會降低數據庫服務的穩定性最好還是能夠分開部署
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22435.html