程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 大內存SQLServer數據庫的加速劑

大內存SQLServer數據庫的加速劑

編輯:關於SqlServer
 

數據庫配置比較大的內存,可以有效提高數據庫性能。因為數據庫在運行過程中,會在內存中劃出一塊區域來作為數據緩存。通常情況下,用戶訪問數據庫時,數據先會被讀取到這個數據緩存中。當下次用戶還需要訪問這個數據時,就會從這個數據緩存中讀取。因為在數據緩存中讀取數據要比在硬盤上讀取數據快幾百倍。所以擴大數據庫服務器內存,可以有效提高數據庫性能,特別是操作大型數據庫時效果更加明顯。

但是,現在企業中普遍采用的數據庫服務器都是32位的操作系統。而這個32位的操作系統卻有最大內存的使用限制。通常情況下,標准的32位地址最多可以采用4GB的內存。若數據庫管理員想讓數據庫系統采用更多的內存來提高數據庫的性能,則就需要進行額外的配置。下面筆者就介紹兩種常用的配置方式,讓SQLServer數據庫服務器支持大內存,讓其成為數據庫的加速劑。

一、讓數據庫應用程序支持3GB的內存空間

雖然操作系統支持4GB內存。可是,這並不會全部給數據庫等應用程序使用。默認情況下,在32位操作系統中,將有2GB的內存空間是為操作系統所保留的。即使沒有用完,其他應用程序也是不能夠染指的。而包含SQL Server數據庫在內的所有應用程序,只能過采用剩余的2GB內存空間。

但是,在實際應用中,操作系統往往用不著多大2G的內存。根據筆者的經驗,一般只要為操作系統保留1G的內存已經足夠其使用。只要沒有病毒等不良因素作怪,這個內存不會被完全適用。如此的話,應用程序可以采用的內存空間就會多達3G,比原先整整多出一個G來。

要實現這個轉變,其實很簡單。在Windows操作系統中,有一個BOOT啟動配置文件。為了讓數據庫服務器支持3GB的用戶模式進程空間,必須在這個配置文件中,加入一個/3gb的參數,然後重新啟動操作系統即可。這麼設置之後,應用程序就可以尋址3GB的進程地址空間 ,而為操作系統保留1GB的內存空間。

有時候,這個小小的配置可以在很大程度上提高數據庫的性能。記得有一次,筆者為一家企業優化數據庫性能。筆者查看了用戶的數據庫環境之後,就建議用戶增大數據庫服務器的內存,從2G增加到4G。可是,效果並沒有很大的改善。正當筆者束手無措的時候,就想到了改變操作系統與應用程序的內存分配方式。為此,筆者就更改了BOOT啟動配置文件,只給操作系統保留1G的內存空間。重新啟動後,數據庫性能得到了很大的改善。

二、為SQLServer啟用更高的內存支持

如果數據庫應用程序內存尋址空間達到3GB後,數據庫管理員還不滿足的話,則就需要通過增加物理內存的方式,來提高應用程序的性能。若需要服務器操作系統突破其默認4GB內存空間的限制,支持4GB以上的內存空間,也不是不可能的。只是需要進行額外的配置,並且,其維護的工作量也比較大。

若想要SQLServer數據庫支持4GB以上的內存尋址空間,則往往需要進行如下配置。

第一步:鎖定內存頁。

默認情況下,內存大小與操作系統的虛擬內存之間有一個正比例關系。在這裡,數據庫管理員只想增大服務器的物理內存,而不想對虛擬內存有什麼影響。故需要鎖定內存頁。鎖定內存頁的主要作用就是確定哪些帳戶可以使用進程將數據保留在物理內存中,從而阻止系統將數據分頁到磁盤的虛擬內存中。默認情況下,這個選項的只為OFF。也就是說,在必要的時候,系統會將數據分頁到硬盤的虛擬空間中。為了最大程度發揮內存的效用,就需要把這個選項開啟。不過這數據庫管理員往往需要尋求系統管理員的幫助,因為只有具有系統管理員權限的用戶,才能夠給更改這個選項。

第二步:啟用Awe Enable選項。

默認情況下,即使服務器操作系統支持4GB以上的內存空間,可是數據庫應用程序並不一定支持。為了讓SQLServer應用程序也支持這個,就必須更改數據庫的配置參數。也就是說,需要將這個選項的值設置為1,然後重新啟動數據庫系統。這個配置比較簡單,只需要利用命令sp_configure 'awe enabled', 1即可。不過在進行這個配置之前,需要注意兩個細節方面的內容。一是數據庫用戶需要這個操作的權限。二是這裡有一個BUG,即在SQL Server數據庫中會有一個錯誤信息。數據庫管理員可以忽略這個信息。

第三步:限制文件系統緩存。

若增加的內存給操作系統或者其他應用程序用了,那麼數據庫管理員不是白忙一場嗎?為此,數據庫管理員還需要優化數據庫系統內存的使用情況。如需要限制系統用於文件緩存的內存量。如要這麼處理的話,只需要簡單的三個步驟即可。

首先,數據庫管理員在操作系統中,找到控制面板,並雙擊網絡連接,然後選中本地連接。其次,雙擊本地連接,在彈出的對話框中,找到常規選項卡,單擊屬性。選中網絡文件與打印機共享,並單擊屬性。最後,在彈出的對話框中,去掉“最大化網絡應用程序數據吞吐量”復選框。一路按確認即可。這個簡單的步驟,就可以優化數據庫內存的使用率。

三、大內存維護管理幾個關鍵點

在通常情況下,往往不需要啟用4GB以上的內存。但是,若在服務器上,同時啟用了其他的應用程序服務。如在一台服務器上同時有數據庫應用程序、郵件應用程序、文件服務器等多個應用服務的話,則可能原有的4GB內存無法滿足。系統管理員不得不對內存進行升級。但是,對內存升級之後,數據庫管理員需要手工對內存的分配進行干預,以免SQLServer應用程序占用比較多的內存空間,而影響其他應用程序的性能。

1、配置max server memory選項。雖然說這個選項並不是必須要修改的,但是筆者仍強烈建議數據庫管理員要修改這個選項。特別是數據庫應用程序與其他應用程序共享同一台服務器時。因為啟動SQLServer對大內存的支持後(將Awe Enabled設置為1),而且可用物理內存大於用戶模式進程空間。則當啟動數據庫服務器時,運行的SQLServer實例將會占用幾乎所有的可用內存(不管需不需要使用,數據庫服務器程序會先鎖定這些內存。這就叫占著茅坑不拉屎)。而這個max server memory選項就是用來配置其最大可以占用的內存數量。數據庫管理員需要預先估算出一個合理的數值,然後進行配置。讓數據庫應用程序與其他應用服務能夠共同改善,至少不能夠對其他應用程序的性呢產生不良影響。在比較極端的情況下,可以在升級內存之前,先關閉數據庫應用程序;然後啟用其他應用程序服務。觀測一段時間,看看他們所需要用到多少的內存。然後升級內存,並為其他應用程序至少保留以前所需要的內存空間。否則的話,就會對其他應用程序產生不良影響。犧牲其他應用程序的性能來提高數據庫的性能,這是拆西牆補東牆的做法,不值得取。

2、多個SQLServer實例內存如何分配。往往在一個SQLServer數據庫中,會配置多個數據庫實例。一個數據庫實例用來負責ERP系統的運行,另外一個則是給CRM系統使用。在同一個數據庫系統中,有多個數據庫實例,此時該如何在各個實例之間分配可用的內存呢?這基於操作系統的不同,又有所不同。如果數據庫操作系統采用的是2000系列的,則需要為每個數據庫實例配置max server memory選項。否則的話,其中某一個數據庫實例就有可能鎖定全部的可用內存。這主要是因為2000系列的服務器系統並不支持動態分配大內存。所以需要為每個數據庫實例配置這個選項。但是,若數據庫服務器采用的是2003系列的服務器操作系統,則不需要進行手工的配置這些參數。因為操作系統會動態地分配內存。也就是說,操作系統會按照總體系統要求平衡SQLServer各個實例之間內存的使用。不過為了提高數據庫整體性能,最好還是為各個實例配置max server memory;而不讓操作系統來搞平衡。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved