SQL?Server?內(nèi)存占用高分析及問題解決辦法
SQL Server 內(nèi)存占用高分析及解決辦法(超詳細(xì))
一、問題
1.1、SQL Server內(nèi)存占用高 ,內(nèi)存不釋放
1.2、SQL Server 內(nèi)存使用策略
SQL Server對服務(wù)器內(nèi)存的使用策略是有多少占多少(大約到剩余內(nèi)存為4M左右)只用在服務(wù)器內(nèi)存不足時,
才會釋放一點占用的內(nèi)存,所以很多時候,我們會發(fā)現(xiàn)運行SQL Server的系統(tǒng)內(nèi)存往往居高不下這些內(nèi)存一般都
是SQL Server運行時候用作緩存的。
數(shù)據(jù)緩存:
例如:你運行一個select語句,那么SQL Server會將相關(guān)的數(shù)據(jù)頁(SQL Server操作的數(shù)據(jù)都是以頁為單位的,在
SQL Server中頁的大小始終是8kb的大小,頁有不同的類型:數(shù)據(jù)頁,索引頁,系統(tǒng)頁等等)加載到內(nèi)存中進(jìn)行
緩存,以便于再次請求此頁的數(shù)據(jù)的時候,直接從內(nèi)存返回,就無需讀取磁盤了,大大提高了速度。
執(zhí)行命令緩存:
如執(zhí)行存儲過程,自定函數(shù)時,SQL Server 需要先二進(jìn)制編譯再運行,編譯后的結(jié)果也會緩存起來,再次調(diào)用時就無需再次編譯。
二、解決辦法
當(dāng)我們知道SQL Server 內(nèi)存占用方式,就有以下兩種解決辦法
-- 查看內(nèi)存使用情況,這個會返回多個結(jié)果集數(shù)據(jù),可以有助于我們排查內(nèi)存問題 DBCC MemoryStatus
結(jié)果集部分重要指標(biāo)解釋(請注意,DBCC MEMORYSTATUS
的輸出格式和內(nèi)容可能會隨著SQL Server版本的不同而有所變化):對指標(biāo)不感興趣,一股腦解決問題可跳過 如下指標(biāo)查看,直接到下面 緩存清除命令
1、Total Server Memory (KB)
- 含義:SQL Server實際使用的內(nèi)存量(以千字節(jié)為單位)。
- 重要性:這是SQL Server當(dāng)前占用的實際物理內(nèi)存大小,直接反映了SQL Server對系統(tǒng)資源的影響。如果這個值接近或超過了配置的最大服務(wù)器內(nèi)存限制,可能表明存在內(nèi)存壓力。
2、Target Server Memory (KB)
- 含義:SQL Server理想情況下想要保留的內(nèi)存量(以千字節(jié)為單位),基于當(dāng)前負(fù)載和配置參數(shù)計算得出的目標(biāo)值。
- 重要性:與
Total Server Memory
對比,可以幫助識別是否存在內(nèi)存不足的情況。如果Total Server Memory
遠(yuǎn)低于Target Server Memory
,則可能是由于其他進(jìn)程占用了過多的內(nèi)存。
3、Memory Grants Outstanding
- 含義:等待分配給查詢的內(nèi)存請求數(shù)量。
- 重要性:此數(shù)字較大時,意味著有大量并發(fā)查詢正在爭奪有限的內(nèi)存資源,可能導(dǎo)致查詢延遲增加。長期保持高位可能需要調(diào)整最大內(nèi)存設(shè)置或者優(yōu)化查詢。
4、Page Life Expectancy (PLE)
- 含義:一個頁面在緩沖池中停留而不被移出的平均時間(以秒為單位)。雖然PLE不是
DBCC MEMORYSTATUS
直接輸出的字段,但可以通過sys.dm_os_performance_counters
視圖獲取。 - 重要性:PLE是一個重要的內(nèi)存健康指標(biāo)。較高的PLE值通常表示內(nèi)存充足,而較低的PLE值(例如小于300秒)可能指示內(nèi)存壓力,因為頁面被頻繁地從緩存中移除。
5、Available Physical Memory (KB)
- 含義:當(dāng)前可用的物理內(nèi)存量(以千字節(jié)為單位),即未被占用或預(yù)留的內(nèi)存。
- 重要性:了解系統(tǒng)的整體內(nèi)存情況,幫助判斷是否有足夠的空閑內(nèi)存供SQL Server和其他應(yīng)用程序使用。低可用內(nèi)存可能導(dǎo)致操作系統(tǒng)開始交換內(nèi)存到磁盤,從而降低性能。
6、Available Paging File (KB)
- 含義:當(dāng)前可用的頁面文件空間量(以千字節(jié)為單位)。
- 重要性:盡管SQL Server盡量避免使用頁面文件,但如果物理內(nèi)存不足,它仍會依賴頁面文件。因此,確保有足夠的頁面文件空間也很重要,但應(yīng)盡量減少對它的依賴。
7、Percent of Committed Memory in WS
- 含義:已提交的內(nèi)存中位于工作集內(nèi)的百分比。
- 重要性:這個比率有助于理解有多少已分配給SQL Server的內(nèi)存正被積極使用。高比例表明大部分內(nèi)存都在活躍使用中,而低比例可能暗示有未充分利用的內(nèi)存或存在過多的內(nèi)存分配。
8、System Physical Memory Low
- 含義:一個狀態(tài)標(biāo)志,表示系統(tǒng)物理內(nèi)存處于“低”水平。
- 重要性:當(dāng)此標(biāo)志為真時,意味著系統(tǒng)物理內(nèi)存接近耗盡,可能需要采取行動來緩解內(nèi)存壓力,比如增加物理內(nèi)存、優(yōu)化查詢或調(diào)整SQL Server的最大內(nèi)存設(shè)置。
9、Page Faults
- 含義:頁面錯誤的數(shù)量,指的是嘗試訪問不在物理內(nèi)存中的頁面而觸發(fā)的操作系統(tǒng)加載頁面的行為次數(shù)。
- 重要性:頻繁的頁面錯誤(特別是硬頁面錯誤)可能指示內(nèi)存不足,因為每次頁面錯誤都會導(dǎo)致磁盤I/O操作,這將顯著影響性能。
10、Memory Grants Pending
- 含義:已提交但尚未完成處理的內(nèi)存請求隊列長度。
- 重要性:如果這個值非零,意味著有內(nèi)存請求在等待處理,這可能會延遲查詢執(zhí)行。長期存在的非零值可能指向內(nèi)存爭用問題。
11、Lock Pages in Memory Usage (KB)
- 含義:如果啟用了“鎖頁”選項,則該值表示用于鎖定到物理內(nèi)存中的頁數(shù)量(以千字節(jié)為單位)。
- 重要性:啟用“鎖頁”可以防止SQL Server的工作集被換出到磁盤,提高性能。但是,這也減少了操作系統(tǒng)可用于其他進(jìn)程的物理內(nèi)存。
12、Large Pages Allocated (KB)
- 含義:如果啟用了大頁支持,則顯示已分配的大頁內(nèi)存量(以千字節(jié)為單位)。
- 重要性:大頁可以減少TLB(Translation Lookaside Buffer)丟失并提升性能。對于大型數(shù)據(jù)倉庫或OLAP環(huán)境,啟用大頁支持可能會帶來性能改進(jìn)。
這些關(guān)鍵指標(biāo)提供了關(guān)于SQL Server內(nèi)存使用情況的全面視圖,并且對于診斷性能問題非常有價值。通過定期監(jiān)控這些指標(biāo),可以及時發(fā)現(xiàn)潛在的問題,并采取適當(dāng)?shù)拇胧﹣韮?yōu)化SQL Server的性能。此外,結(jié)合動態(tài)管理視圖(DMVs),如sys.dm_os_memory_clerks
、sys.dm_exec_query_memory_grants
等,以及性能計數(shù)器,可以獲得更加詳細(xì)的洞察力,從而更好地管理和調(diào)優(yōu)SQL Server實例。
緩存清除命令
-- 臨時清除緩存命令 DBCC FREEPROCCACHE --清除存儲過程相關(guān)的緩存 DBCC REESESSIONCACHE --清除會話緩存 DBCC FREESYSTEMCACHE('All') --清除系統(tǒng)緩存 DBCC DROPCLEANBUFFERS --清除所有緩存
以上命令雖然會清除掉現(xiàn)有緩存,為新的緩存騰出空間,但是Sql server并不會因此釋放掉已經(jīng)占用的內(nèi)存。Sql
Server并沒有提供任何命令允許我們釋放不用到的內(nèi)存。因此我們只能通過動態(tài)調(diào)整Sql Server可用的物理內(nèi)存設(shè)
置來強迫它釋放內(nèi)存。
如果想讓 Sql Server 主動釋放 占用并空閑的內(nèi)存空間,可以設(shè)置Sql Server占用內(nèi)存的上限,就會讓Sql server在
內(nèi)存上限范圍內(nèi),主動清除臟數(shù)據(jù)替換成熱數(shù)據(jù)。因此還得如下操作
三、設(shè)置內(nèi)存最大占用值
設(shè)置方式:
從自帶的studio 連接,,在數(shù)據(jù)庫服務(wù)器名稱上點擊【右鍵】,選擇【屬性】,然后,找到【內(nèi)存】選項,在右邊的【使用AWE分配內(nèi)存】(sqlServer64的應(yīng)該不用勾)左邊把對勾打上。在最大服務(wù)器內(nèi)存(MB)上填入適當(dāng)?shù)拇笮。ň唧w填多大,肯定不能超過計算機的物理內(nèi)存,建議控制在60%-75%),設(shè)置成功后重啟
四、 其他
結(jié)果集圖片:執(zhí)行 DBCC MemoryStatus
到此這篇關(guān)于SQL Server 內(nèi)存占用高分析及解決辦法(超詳細(xì))的文章就介紹到這了,更多相關(guān)SQL Server 內(nèi)存占用高內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SQL?server數(shù)據(jù)庫log日志過大占用內(nèi)存大的解決辦法
- SQL server內(nèi)存問題排查方案
- SQL?Server內(nèi)存機制詳解
- sql server學(xué)習(xí)基礎(chǔ)之內(nèi)存初探
- SQL Server 2008 R2占用cpu、內(nèi)存越來越大的兩種解決方法
- SqlServer如何通過SQL語句獲取處理器(CPU)、內(nèi)存(Memory)、磁盤(Disk)以及操作系統(tǒng)相關(guān)信息
- SQL語句實現(xiàn)查詢SQL Server內(nèi)存使用狀況
- 揭秘SQL Server 2014有哪些新特性(1)-內(nèi)存數(shù)據(jù)庫
- 淺談SQL Server 對于內(nèi)存的管理[圖文]
- SQL Server 數(shù)據(jù)頁緩沖區(qū)的內(nèi)存瓶頸分析
相關(guān)文章
Mybatis非配置原因,導(dǎo)致SqlSession was not registered for synchroniza
本文主要介紹Mybatis非配置原因出錯,這里對這個出現(xiàn)的問題做了詳細(xì)介紹,及解決辦法,有興趣的小伙伴可以參考下2016-09-09SQL語句刪除2條重復(fù)數(shù)據(jù)一條保留一條
SQL語句2條完全一樣的數(shù)據(jù)刪除一條保留一條,SQL Server 2005 Express 下測試通過, 僅供參考2012-06-06Select count(*)、Count(1)和Count(列)的區(qū)別及執(zhí)行方式
這篇文章主要介紹了Select count(*)、Count(1)和Count(列)的區(qū)別及執(zhí)行方式,很多人其實對這三者之間是區(qū)分不清的,本文會闡述這三者的作用、關(guān)系以及背后的原理,需要的朋友可以參考下2015-02-02sqlserver實現(xiàn)樹形結(jié)構(gòu)遞歸查詢(無限極分類)的方法
下面小編就為大家?guī)硪黄猻qlserver實現(xiàn)樹形結(jié)構(gòu)遞歸查詢(無限極分類)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07數(shù)據(jù)庫更新Sqlserver腳本總結(jié)
數(shù)據(jù)庫更新Sqlserver腳本總結(jié),需要的朋友可以參考下。2011-06-06