內(nèi)存問題定位基本流程:
成都創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計,網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)站設(shè)計,企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為上1000+服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣服務(wù)!主要用到的性能計數(shù)器
Page life expectancy (數(shù)據(jù)庫計數(shù)器:主要顯示不被使用的頁,將在緩存中停留的秒數(shù) )
Lazy writes/sec ?。〝?shù)據(jù)庫計數(shù)器:惰性寫入器會在內(nèi)存有壓力且有新的內(nèi)存需求時觸發(fā),成批的刷新“老化的緩沖區(qū)”)
Page Reads/sec,Page Writes/sec ?。ㄟ@里使用數(shù)據(jù)庫級別計數(shù)器:當(dāng)需要讀取或?qū)懭氲捻摬辉趦?nèi)存中,需要到磁盤中讀取時計數(shù))
Target Server Memory (KB) (SQL server能夠使用的內(nèi)存總量)
Total Server Memory (KB) ?。⊿QL SERVER使用的內(nèi)存總量,這里指BUFFER POOL的大?。?/p>
Available MBytes (系統(tǒng)系數(shù)器:主要顯示系統(tǒng)還有多少可用內(nèi)存)
注:Target Server Memory (KB) - Total Server Memory (KB) 約等于SQL SERVER還可以使用的內(nèi)存數(shù)。
Total Server Memory (KB)(SQL SERVER使用的內(nèi)存總量,這里指BUFFER POOL的大?。┛梢圆榭碨QL Server使用的內(nèi)存總量,如果當(dāng)使用的內(nèi)存總量很小,而服務(wù)器依然有很大的內(nèi)存Available MBytes請檢查,是否限制了SQL Server的內(nèi)存使用。
Available MBytes 主要顯示系統(tǒng)中還多少空閑內(nèi)存 (如果這個值較大,而Target Server Memory (KB) - Total Server Memory (KB) 為0或者較小,可以適當(dāng)?shù)恼{(diào)大max server memory(大內(nèi)存,稍后介紹))
如果Total Server Memory (KB) 計數(shù)器有陡降的情況發(fā)生,一般可以說明有外部程序?qū)?nèi)存的使用占用的數(shù)據(jù)庫使用的內(nèi)存。
步驟2.內(nèi)存問題定位
內(nèi)存持續(xù)壓力
Lazy writes/sec
Page life expectancy
內(nèi)存波動壓力
Page Reads/sec
Lazy writes/sec
Page life expectancy
步驟3.內(nèi)存問題分析與解決(通用步驟)
系統(tǒng)設(shè)置大內(nèi)存max server memory
問:我系統(tǒng)內(nèi)存本來就不夠為什么還要設(shè)置使用上限?我這服務(wù)器就給數(shù)據(jù)庫用還用設(shè)置?
答:數(shù)據(jù)庫是運行在windows 上的應(yīng)用,他和notepad對于操作系統(tǒng)來說本質(zhì)上沒區(qū)別,那么這就好比君(操作系統(tǒng))與 臣(數(shù)據(jù)庫)的關(guān)系。
而SQL SERVER是一個很喜歡內(nèi)存的應(yīng)用,所以很可能吃掉大量內(nèi)存導(dǎo)致windows系統(tǒng)沒有足夠內(nèi)存使用,,那么這時候君臣關(guān)系就體現(xiàn)的淋漓盡致了,君(windows) 要臣(SQL SERVER)死(釋放內(nèi)存)臣不得不死呀...這個釋放在一定程度上可不是單單讓windows夠用了,很可能導(dǎo)致SQL內(nèi)存陡降,以致SQL 短時間假死(操作無響應(yīng))。所以為了你數(shù)據(jù)庫的穩(wěn)定性,這個大上限一定要設(shè)置。
內(nèi)存設(shè)置推薦:
一般我比較推薦如果內(nèi)存較小操作系統(tǒng)預(yù)留3G-4G ,如果內(nèi)存大256或512以上在數(shù)據(jù)庫內(nèi)存無壓力時預(yù)留5%給操作系統(tǒng),剩下給SQL SERVER ,如果服務(wù)器還有其他應(yīng)用還要在SQL 中減掉應(yīng)用所占的內(nèi)存。
如果內(nèi)存比較小且數(shù)據(jù)庫內(nèi)存壓力大,則可以通過前面講述的Available MBytes 的判斷結(jié)果適量給系統(tǒng)預(yù)留內(nèi)存。
注意:大內(nèi)存的設(shè)置單位為 MB。
語句優(yōu)化系列請關(guān)注后續(xù)文章,這里只針對降低內(nèi)存
降低內(nèi)存對語句優(yōu)化主要集中在幾個方面:
是否缺失索引?
消耗內(nèi)存的操作是否可以消除(如排序)
降低語句復(fù)雜性,讓優(yōu)化器能選用最佳計劃
語句消耗內(nèi)存主要體現(xiàn)在大量的讀取,或者有排序等操作。
所謂的讀,簡單理解就是在語句執(zhí)行時所需要用到的數(shù)據(jù)頁數(shù),需要的越多就需要越大的內(nèi)存來緩存這些數(shù)據(jù)頁。如果需要的頁不在內(nèi)存中還需要從磁盤讀取 (磁盤讀取就是為什么Page Reads/sec 會高)
簡單的一個加索引降低邏輯讀的例子~
語句使用了一個整個表掃描的計劃,執(zhí)行了 19秒,邏輯讀取143800次,預(yù)讀137236 (磁盤上讀取),消耗了40KB 的內(nèi)存 ,并且明確提示出缺少索引!
那么我們加上提示缺少的索引,再次執(zhí)行
加上索引的語句執(zhí)行不到1秒 邏輯讀降低到13次,內(nèi)存消耗已經(jīng)可以忽略不計。這就是索引對語句的重要性!單條語句如此,你的系統(tǒng)中到底有多少這樣的語句呢?
再來看一個寫法修改的例子 :
只是簡單的改了下語句的寫法時間有7秒變成1秒,內(nèi)存消耗從300+MB 變成 1MB
這兩個例子,告訴我們也許系統(tǒng)中簡簡單單做一些調(diào)整,內(nèi)存的壓力就會明顯降低或者變得非常充足,所以在你下了一個需要購買內(nèi)存的決定前,是否針對系統(tǒng)的語句進行過調(diào)優(yōu)?
內(nèi)存波動
如果你是系統(tǒng)維護人員,看到類似這樣的內(nèi)存數(shù)據(jù)指標,如果你還不能有一些思路,請你好好熟悉下你的系統(tǒng)。
這張圖很清晰地反映出系統(tǒng)每隔幾小時會有一次的內(nèi)存壓力,那么別忙著去找對應(yīng)時間點的語句,我們最少要好好想一下,系統(tǒng)中有什么操作定時執(zhí)行?SQL JOB?計劃任務(wù)?前臺定時處理?等等等
這個規(guī)律的定時處理是否有異常?是否最近有什么改動?執(zhí)行的結(jié)果是不是和你想的一樣?
也許問題就這么清晰的定位了......
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。