時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
不久之前,筆者一個在企業(yè)中從事網(wǎng)管工作的朋友向我求助關(guān)于SQL Server服務(wù)器內(nèi)存升級后遇到的問題。原來,他們企業(yè)準備上一個企業(yè)郵箱系統(tǒng)。為了節(jié)省開支,他們準備在原來的SQL Server服務(wù)器上部署企業(yè)的郵箱服務(wù)器。為了提高這個服務(wù)器的性能,讓其能夠承擔(dān)其兩種應(yīng)用服務(wù)的重任,所以,他們對內(nèi)存進行了升級。從原先的1G升級到了2G。
但是,內(nèi)存升級完以后,郵箱應(yīng)用服務(wù)的性能不但沒有改善,而且,還有惡化的趨勢。運行一段時間后,這臺服務(wù)器上運行的郵箱系統(tǒng)就出現(xiàn)了異常情況。時不時的會報出內(nèi)存分配不足的情況。一開始,他們還以為是郵箱服務(wù)器跟SQL Server服務(wù)器不兼容。故還請了郵箱服務(wù)器的技術(shù)人員前來查看。經(jīng)過他們的檢查,發(fā)現(xiàn)是SQL Server服務(wù)占用的大部分內(nèi)存所導(dǎo)致的。SQL Server服務(wù)所需要的內(nèi)存,從升級之前的600M左右一下子到了1.5個G。難怪郵箱應(yīng)用服務(wù)要警報說內(nèi)存不夠了。
一、原因分析。
筆者對這種問題已經(jīng)是見怪不怪了,已經(jīng)遇到過好幾次類似的故障。在SQL Server數(shù)據(jù)庫啟動的時候,數(shù)據(jù)庫系統(tǒng)會根據(jù)物理內(nèi)存的大小來動態(tài)的增大或者縮小高速緩沖區(qū)的容量。這主要是為了提高SQL Server服務(wù)器的性能才如此的設(shè)計的。
我們知道,一般情況下,高速緩沖區(qū)越大,則SQL Server服務(wù)器的性能越好。這主要是因為有些用戶查詢過的數(shù)據(jù)都可以放在高速緩沖區(qū)(即內(nèi)存的其中一部分)中。如此的話,當(dāng)用戶下次再次需要這些數(shù)據(jù)的時候,就不用到硬盤中去讀取,而直接在內(nèi)存中讀取即可。而從內(nèi)存中讀取數(shù)據(jù)要比在硬盤中讀取速度要快的多。
所以,只要當(dāng)服務(wù)器的可用內(nèi)存在4MB與10MB之間的話,數(shù)據(jù)庫系統(tǒng)就會把它的高速緩沖區(qū)不斷的擴大。如此的話,當(dāng)郵箱服務(wù)器突然需要用到比較大的內(nèi)存,如對郵箱進行備份或者有用戶群發(fā)郵件的時候,就會報錯說"內(nèi)存分配不足"。
故一般只是內(nèi)存升級,往往不能夠解決SQL Server服務(wù)與其他應(yīng)用服務(wù)搶占內(nèi)存的情況。為了讓SQL Server能夠與其他應(yīng)用服務(wù)友好的共處,數(shù)據(jù)庫管理員還需要對內(nèi)存進行合理的分配,限制SQL Server數(shù)據(jù)庫服務(wù)內(nèi)存的占用率。
二、解決方法。
針對他們企業(yè)的這種情況,筆者給出兩個建議。一是合理地給SQL Server數(shù)據(jù)庫分配內(nèi)存。而是不要把SQL Server服務(wù)跟其他應(yīng)用服務(wù)放在同一臺服務(wù)器上,畢竟數(shù)據(jù)庫服務(wù)的并發(fā)行訪問比較多,對服務(wù)器的性能要求比較高。
若果企業(yè)選擇第一種應(yīng)對措施的話,就需要限制SQL Server服務(wù)器的內(nèi)存使用率。為了使得運行在同一臺服務(wù)器的SQL Server服務(wù)器與郵箱服務(wù)能夠達到一個合理的性能,能夠和平共處,就需要采取一定的措施限制SQL Server數(shù)據(jù)庫服務(wù)的內(nèi)存使用量。在SQL Server服務(wù)器中,專門提供了一個工具(數(shù)據(jù)庫引擎),可以用來幫助我們干預(yù)SQL Server服務(wù)器的內(nèi)存分配。
具體的說,可以按如下方法進行配置。
第一步:打開SQL Server企業(yè)管理器。
在SQL Server數(shù)據(jù)庫中,提供了一個圖形化界面的企業(yè)管理器。在這個管理平臺上可以對SQL Server的大部分服務(wù)進行管理與配置。SQL Server數(shù)據(jù)庫服務(wù)的內(nèi)存分配規(guī)則當(dāng)然也不例外,可以在這里進行調(diào)整。
第二步:找到我們需要調(diào)整的服務(wù)器。
有些企業(yè),可能在網(wǎng)絡(luò)中部署了多個SQL Server服務(wù)器。為了管理的方面,會在其中一臺服務(wù)器上的企業(yè)管理器中集中進行管理。不過,這家企業(yè)他們只有一個SQL Server服務(wù)器。在我們需要調(diào)整的服務(wù)器上,右鍵單擊,選擇"屬性"。然后就會彈出一個對話框。在對話框中選擇"內(nèi)存選項卡"。在這里就可以對數(shù)據(jù)庫應(yīng)用服務(wù)的內(nèi)存分配方法進行設(shè)置。
第三步:調(diào)整相關(guān)的內(nèi)存參數(shù)。
在這張選項卡中,一般有兩個參數(shù),分別為最小服務(wù)內(nèi)存與最大服務(wù)內(nèi)存。在實際工作中,我們往往有兩種配置方法。
一是配置一個最大最小內(nèi)存。即給SQL Server數(shù)據(jù)庫應(yīng)用服務(wù)設(shè)置一個最大的使用內(nèi)存。如此的話,在這個最大的范圍之后,數(shù)據(jù)庫系統(tǒng)會根據(jù)實際情況,在最大內(nèi)存范圍之內(nèi)對內(nèi)存的分配進行調(diào)整。一般情況下,最小內(nèi)存我們可以不設(shè)置,只對最大內(nèi)存進行限制即可。這就給數(shù)據(jù)庫一種自主選擇的權(quán)利。可以提高內(nèi)存的使用效率。
二是固定內(nèi)存分配。即把"最小服務(wù)內(nèi)存"與"最大服務(wù)內(nèi)存"兩個參數(shù)設(shè)置為相同。如此的話,不管數(shù)據(jù)庫服務(wù)需要多大的內(nèi)存,在服務(wù)器啟動的時候,操作系統(tǒng)都會給其預(yù)留這么大的內(nèi)存。其他的應(yīng)用程序及時內(nèi)存再怎么不足,也不會跨越數(shù)據(jù)庫的內(nèi)存領(lǐng)地。很明顯,這種方式雖然保證了數(shù)據(jù)庫服務(wù)的內(nèi)存需求,但是,內(nèi)存的使用率并不是很高。
針對上面兩種方法,筆者比較傾向與使用第一種配置,即只對數(shù)據(jù)庫應(yīng)用服務(wù)的最大內(nèi)存使用率進行限制。只要不超過這個范圍,則服務(wù)器可以自主的進行調(diào)解。那么這個最大的使用率設(shè)置成多少合適呢?這主要要看企業(yè)所部屬的服務(wù)了。由于這家企業(yè),在同一臺服務(wù)器上運行了郵箱服務(wù)器與數(shù)據(jù)庫服務(wù)器,可能對硬件的壓力比較大。因為這兩個應(yīng)用服務(wù),都涉及到比較多的并發(fā)訪問。所以,即使把硬件升級成了2G,估計也不能夠給數(shù)據(jù)庫服務(wù)分配比較多的內(nèi)存。一般來說,并發(fā)性訪問越多,則最好能夠給其配置比較多的內(nèi)存。
配置完成之后,不用重新啟動,這個規(guī)則就會起效。不過筆者還是建議把SQL Server服務(wù)重新啟動一下。在可以的情況下,把服務(wù)器重新啟動一下最好。如此的話,操作系統(tǒng)就會根據(jù)這個規(guī)則,對內(nèi)存進行重新的調(diào)整分配。也可以讓SQL Server服務(wù)器更好的隊內(nèi)存進行合理的安排。如可以把SQL Serve可用內(nèi)存固定在一個連續(xù)的區(qū)域內(nèi),以提高數(shù)據(jù)庫的性能。
三、總結(jié)。
針對這個內(nèi)存升級后所產(chǎn)生的煩惱,筆者有幾句話說。
一是硬件升級只是數(shù)據(jù)庫服務(wù)器性能提升的一個充分條件,而不是必要條件。也就是說,硬件的升級并不一定會導(dǎo)致服務(wù)器性能的提升。在硬件升級的同時,往往也需要調(diào)整相關(guān)的配置。讓硬件升級的優(yōu)勢得到極大的發(fā)揮。筆者認為,有時候服務(wù)配置比純粹的硬件升級更加重要。一些經(jīng)驗不足的網(wǎng)絡(luò)管理人員只知道升級硬件,而忽視了服務(wù)的調(diào)整配置。他們這是走進了一個死胡同,效果往往不能夠達到他們的預(yù)期。
二是一些并發(fā)性比較大的應(yīng)用服務(wù)器,最好不要放在同一個服務(wù)器上?,F(xiàn)在企業(yè)基于服務(wù)器、客戶端模式的管理軟件應(yīng)用越來越多。這種模式一個顯著的特點,就是并發(fā)性訪問比較頻繁,給應(yīng)用服務(wù)器帶來了很大的壓力。在一些性能要求比較高的企業(yè),它們把數(shù)據(jù)庫與前臺的應(yīng)用程序服務(wù)器都分開放置,以求優(yōu)化服務(wù)器的性能。而且,現(xiàn)在服務(wù)器價格已經(jīng)逐漸能夠被企業(yè)所接受。筆者認為,企業(yè)沒有必要在這方面省錢。若多個應(yīng)用服務(wù)并發(fā)性訪問比較多的情況下,則最好考慮把他們部署在不同的服務(wù)器上。以提高各個應(yīng)用服務(wù)的性能。
三是在同一個服務(wù)器上部署多個應(yīng)用服務(wù)的話,要考慮應(yīng)用服務(wù)的穩(wěn)定性。因為像這家企業(yè)在同一個服務(wù)器上部署數(shù)據(jù)庫與郵箱服務(wù)器,筆者并不是很贊同。因為郵箱服務(wù)器是一個比較容易遭受到攻擊的服務(wù)器。垃圾郵件、病毒郵件等等都可能導(dǎo)致服務(wù)期運行不正常。把郵箱服務(wù)放在SQL Server數(shù)據(jù)庫服務(wù)旁邊,會降低數(shù)據(jù)庫服務(wù)的穩(wěn)定性。最好還是能夠分開部署。
關(guān)鍵詞標簽:SQL Server,服務(wù)器
相關(guān)閱讀
熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系
人氣排行 配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠程導(dǎo)入(導(dǎo)出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法