共計 2929 個字符,預計需要花費 8 分鐘才能閱讀完成。
這篇文章給大家分享的是有關 SQLServer 數據庫服務器如何擴大內存的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
一、讓數據庫應用程序支持 3GB 的內存空間
雖然操作系統支持 4GB 內存。可是,這并不會全部給數據庫等應用程序使用。默認情況下,在 32 位操作系統中,將有 2GB 的內存空間是為操作系統所保留的。即使沒有用完,其他應用程序也是不能夠染指的。而包含 SQLServer 數據庫在內的所有應用程序,只能過采用剩余的 2GB 內存空間。
但是,在實際應用中,操作系統往往用不著多大 2G 的內存。根據筆者的經驗,一般只要為操作系統保留 1G 的內存已經足夠其使用。只要沒有病毒等不良因素作怪,這個內存不會被完全適用。如此的話,應用程序可以采用的內存空間就會多達 3G,比原先整整多出一個 G 來。
要實現這個轉變,其實很簡單。在 Windows 操作系統中,有一個 BOOT 啟動配置文件。為了讓數據庫服務器支持 3GB 的用戶模式進程空間,必須在這個配置文件中,加入一個 /3gb 的參數,然后重新啟動操作系統即可。這么設置之后,應用程序就可以尋址 3GB 的進程地址空間,而為操作系統保留 1GB 的內存空間。
有時候,這個小小的配置可以在很大程度上提高數據庫的性能。記得有一次,筆者為一家企業優化數據庫性能。筆者查看了用戶的數據庫環境之后,就建議用戶增大數據庫服務器的內存,從 2G 增加到 4G。可是,效果并沒有很大的改善。正當筆者束手無措的時候,就想到了改變操作系統與應用程序的內存分配方式。為此,筆者就更改了 BOOT 啟動配置文件,只給操作系統保留 1G 的內存空間。重新啟動后,數據庫性能得到了很大的改善。
二、為 SQLServer 啟用更高的內存支持
假如數據庫應用程序內存尋址空間達到 3GB 后,數據庫管理員還不滿足的話,則就需要通過增加物理內存的方式,來提高應用程序的性能。若需要服務器操作系統突破其默認 4GB 內存空間的限制,支持 4GB 以上的內存空間,也不是不可能的。只是需要進行額外的配置,并且,其維護的工作量也比較大。
若想要 SQLServer 數據庫支持 4GB 以上的內存尋址空間,則往往需要進行如下配置。
第一步:鎖定內存頁。
默認情況下,內存大小與操作系統的虛擬內存之間有一個正比例關系。在這里,數據庫管理員只想增大服務器的物理內存,而不想對虛擬內存有什么影響。故需要鎖定內存頁。鎖定內存頁的主要作用就是確定哪些帳戶可以使用進程將數據保留在物理內存中,從而阻止系統將數據分頁到磁盤的虛擬內存中。默認情況下,這個選項的只為 OFF。也就是說,在必要的時候,系統會將數據分頁到硬盤的虛擬空間中。為了最大程度發揮內存的效用,就需要把這個選項開啟。不過這數據庫管理員往往需要尋求系統管理員的幫助,因為只有具有系統管理員權限的用戶,才能夠給更改這個選項。
第二步:啟用 AweEnable 選項。
默認情況下,即使服務器操作系統支持 4GB 以上的內存空間,可是數據庫應用程序并不一定支持。為了讓 SQLServer 應用程序也支持這個,就必須更改數據庫的配置參數。也就是說,需要將這個選項的值設置為 1,然后重新啟動數據庫系統。這個配置比較簡單,只需要利用命令 sp_configure aweenabled ,1 即可。不過在進行這個配置之前,需要注意兩個細節方面的內容。一是數據庫用戶需要這個操作的權限。二是這里有一個 BUG,即在 SQLServer 數據庫中會有一個錯誤信息。數據庫管理員可以忽略這個信息。
第三步:限制文件系統緩存。
若增加的內存給操作系統或者其他應用程序用了,那么數據庫管理員不是白忙一場嗎為此,數據庫管理員還需要優化數據庫系統內存的使用情況。如需要限制系統用于文件緩存的內存量。如要這么處理的話,只需要簡單的三個步驟即可。
首先,數據庫管理員在操作系統中,找到控制面板,并雙擊網絡連接,然后選中本地連接。其次,雙擊本地連接,在彈出的對話框中,找到常規選項卡,單擊屬性。選中網絡文件與打印機共享,并單擊屬性。最后,在彈出的對話框中,去掉“最大化網絡應用程序數據吞吐量”復選框。一路按確認即可。這個簡單的步驟,就可以優化數據庫內存的使用率。
三、大內存維護管理幾個關鍵點
在通常情況下,往往不需要啟用 4GB 以上的內存。但是,若在服務器上,同時啟用了其他的應用程序服務。如在一臺服務器上同時有數據庫應用程序、郵件應用程序、文件服務器等多個應用服務的話,則可能原有的 4GB 內存無法滿足。系統管理員不得不對內存進行升級。但是,對內存升級之后,數據庫管理員需要手工對內存的分配進行干預,以免 SQLServer 應用程序占用比較多的內存空間,而影響其他應用程序的性能。
1、配置 maxservermemory 選項。雖然說這個選項并不是必須要修改的,但是筆者仍強烈建議數據庫管理員要修改這個選項。特別是數據庫應用程序與其他應用程序共享同一臺服務器時。因為啟動 SQLServer 對大內存的支持后 (將 AweEnabled 設置為 1),而且可用物理內存大于用戶模式進程空間。則當啟動數據庫服務器時,運行的 SQLServer 實例將會占用幾乎所有的可用內存 (不管需不需要使用,數據庫服務器程序會先鎖定這些內存。這就叫占著茅坑不拉屎)。而這個 maxservermemory 選項就是用來配置其最大可以占用的內存數量。數據庫管理員需要預先估算出一個合理的數值,然后進行配置。讓數據庫應用程序與其他應用服務能夠共同改善,至少不能夠對其他應用程序的性呢產生不良影響。在比較極端的情況下,可以在升級內存之前,先關閉數據庫應用程序; 然后啟用其他應用程序服務。觀測一段時間,看看他們所需要用到多少的內存。然后升級內存,并為其他應用程序至少保留以前所需要的內存空間。否則的話,就會對其他應用程序產生不良影響。犧牲其他應用程序的性能來提高數據庫的性能,這是拆西墻補東墻的做法,不值得取。
2、多個 SQLServer 實例內存如何分配。往往在一個 SQLServer 數據庫中,會配置多個數據庫實例。一個數據庫實例用來負責 ERP 系統的運行,另外一個則是給 CRM 系統使用。在同一個數據庫系統中,有多個數據庫實例,此時該如何在各個實例之間分配可用的內存呢這基于操作系統的不同,又有所不同。假如數據庫操作系統采用的是 2000 系列的,則需要為每個數據庫實例配置 maxservermemory 選項。否則的話,其中某一個數據庫實例就有可能鎖定全部的可用內存。這主要是因為 2000 系列的服務器系統并不支持動態分配大內存。所以需要為每個數據庫實例配置這個選項。但是,若數據庫服務器采用的是 2003 系列的服務器操作系統,則不需要進行手工的配置這些參數。因為操作系統會動態地分配內存。也就是說,操作系統會按照總體系統要求平衡 SQLServer 各個實例之間內存的使用。不過為了提高數據庫整體性能,最好還是為各個實例配置 maxservermemory; 而不讓操作系統來搞平衡。
感謝各位的閱讀!關于“SQLServer 數據庫服務器如何擴大內存”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!