為數據庫配置比較大的內存可以有效提高數據庫性能因為數據庫在運行過程中會在內存中劃出一塊區域來作為數據緩存通常情況下用戶訪問數據庫時數據先會被讀取到這個數據緩存中當下次用戶還需要訪問這個數據時就會從這個數據緩存中讀取因為在數據緩存中讀取數據要比在硬盤上讀取數據快幾百倍所以擴大數據庫服務器內存可以有效提高數據庫性能特別是操作大型數據庫時效果更加明顯
但是現在企業中普遍采用的數據庫服務器都是位的操作系統而這個位的操作系統卻有最大內存的使用限制通常情況下標准的位地址最多可以采用GB的內存若數據庫管理員想讓數據庫系統采用更多的內存來提高數據庫的性能則就需要進行額外的配置下面筆者就介紹兩種常用的配置方式讓SQLServer數據庫服務器支持大內存讓其成為數據庫的加速劑
一讓數據庫應用程序支持GB的內存空間
雖然操作系統支持GB內存可是這並不會全部給數據庫等應用程序使用默認情況下在位操作系統中將有GB的內存空間是為操作系統所保留的即使沒有用完其他應用程序也是不能夠染指的而包含SQL Server數據庫在內的所有應用程序只能過采用剩余的GB內存空間
但是在實際應用中操作系統往往用不著多大G的內存根據筆者的經驗一般只要為操作系統保留G的內存已經足夠其使用只要沒有病毒等不良因素作怪這個內存不會被完全適用如此的話應用程序可以采用的內存空間就會多達G比原先整整多出一個G來
要實現這個轉變其實很簡單在Windows操作系統中有一個BOOT啟動配置文件為了讓數據庫服務器支持GB的用戶模式進程空間必須在這個配置文件中加入一個/gb的參數然後重新啟動操作系統即可這麼設置之後應用程序就可以尋址GB的進程地址空間 而為操作系統保留GB的內存空間
有時候這個小小的配置可以在很大程度上提高數據庫的性能記得有一次筆者為一家企業優化數據庫性能筆者查看了用戶的數據庫環境之後就建議用戶增大數據庫服務器的內存從G增加到G可是效果並沒有很大的改善正當筆者束手無措的時候就想到了改變操作系統與應用程序的內存分配方式為此筆者就更改了BOOT啟動配置文件只給操作系統保留G的內存空間重新啟動後數據庫性能得到了很大的改善
二為SQLServer啟用更高的內存支持
如果數據庫應用程序內存尋址空間達到GB後數據庫管理員還不滿足的話則就需要通過增加物理內存的方式來提高應用程序的性能若需要服務器操作系統突破其默認GB內存空間的限制支持GB以上的內存空間也不是不可能的只是需要進行額外的配置並且其維護的工作量也比較大
若想要SQLServer數據庫支持GB以上的內存尋址空間則往往需要進行如下配置
第一步鎖定內存頁
默認情況下內存大小與操作系統的虛擬內存之間有一個正比例關系在這裡數據庫管理員只想增大服務器的物理內存而不想對虛擬內存有什麼影響故需要鎖定內存頁鎖定內存頁的主要作用就是確定哪些帳戶可以使用進程將數據保留在物理內存中從而阻止系統將數據分頁到磁盤的虛擬內存中默認情況下這個選項的只為OFF也就是說在必要的時候系統會將數據分頁到硬盤的虛擬空間中為了最大程度發揮內存的效用就需要把這個選項開啟不過這數據庫管理員往往需要尋求系統管理員的幫助因為只有具有系統管理員權限的用戶才能夠給更改這個選項
第二步啟用Awe Enable選項
默認情況下即使服務器操作系統支持GB以上的內存空間可是數據庫應用程序並不一定支持為了讓SQLServer應用程序也支持這個就必須更改數據庫的配置參數也就是說需要將這個選項的值設置為然後重新啟動數據庫系統這個配置比較簡單只需要利用命令sp_configure awe enabled 即可不過在進行這個配置之前需要注意兩個細節方面的內容一是數據庫用戶需要這個操作的權限二是這裡有一個BUG即在SQL Server數據庫中會有一個錯誤信息數據庫管理員可以忽略這個信息
第三步限制文件系統緩存
若增加的內存給操作系統或者其他應用程序用了那麼數據庫管理員不是白忙一場嗎?為此數據庫管理員還需要優化數據庫系統內存的使用情況如需要限制系統用於文件緩存的內存量如要這麼處理的話只需要簡單的三個步驟即可
首先數據庫管理員在操作系統中找到控制面板並雙擊網絡連接然後選中本地連接其次雙擊本地連接在彈出的對話框中找到常規選項卡單擊屬性選中網絡文件與打印機共享並單擊屬性最後在彈出的對話框中去掉最大化網絡應用程序數據吞吐量復選框一路按確認即可這個簡單的步驟就可以優化數據庫內存的使用率
三大內存維護管理幾個關鍵點
在通常情況下往往不需要啟用GB以上的內存但是若在服務器上同時啟用了其他的應用程序服務如在一台服務器上同時有數據庫應用程序郵件應用程序文件服務器等多個應用服務的話則可能原有的GB內存無法滿足系統管理員不得不對內存進行升級但是對內存升級之後數據庫管理員需要手工對內存的分配進行干預以免SQLServer應用程序占用比較多的內存空間而影響其他應用程序的性能
配置max server memory選項雖然說這個選項並不是必須要修改的但是筆者仍強烈建議數據庫管理員要修改這個選項特別是數據庫應用程序與其他應用程序共享同一台服務器時因為啟動SQLServer對大內存的支持後(將Awe Enabled設置為)而且可用物理內存大於用戶模式進程空間則當啟動數據庫服務器時運行的SQLServer實例將會占用幾乎所有的可用內存(不管需不需要使用數據庫服務器程序會先鎖定這些內存這就叫占著茅坑不拉屎)而這個max server memory選項就是用來配置其最大可以占用的內存數量數據庫管理員需要預先估算出一個合理的數值然後進行配置讓數據庫應用程序與其他應用服務能夠共同改善至少不能夠對其他應用程序的性呢產生不良影響在比較極端的情況下可以在升級內存之前先關閉數據庫應用程序;然後啟用其他應用程序服務觀測一段時間看看他們所需要用到多少的內存然後升級內存並為其他應用程序至少保留以前所需要的內存空間否則的話就會對其他應用程序產生不良影響犧牲其他應用程序的性能來提高數據庫的性能這是拆西牆補東牆的做法不值得取
多個SQLServer實例內存如何分配往往在一個SQLServer數據庫中會配置多個數據庫實例一個數據庫實例用來負責ERP系統的運行另外一個則是給CRM系統使用在同一個數據庫系統中有多個數據庫實例此時該如何在各個實例之間分配可用的內存呢?這基於操作系統的不同又有所不同如果數據庫操作系統采用的是系列的則需要為每個數據庫實例配置max server memory選項否則的話其中某一個數據庫實例就有可能鎖定全部的可用內存這主要是因為系列的服務器系統並不支持動態分配大內存所以需要為每個數據庫實例配置這個選項但是若數據庫服務器采用的是系列的服務器操作系統則不需要進行手工的配置這些參數因為操作系統會動態地分配內存也就是說操作系統會按照總體系統要求平衡SQLServer各個實例之間內存的使用不過為了提高數據庫整體性能最好還是為各個實例配置max server memory;而不讓操作系統來搞平衡
From:http://tw.wingwit.com/Article/program/SQL/201311/16351.html