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