記一次生產(chǎn)環(huán)境SQL Server服務(wù)器卡頓問題解決--內(nèi)存分配不當(dāng)
概述
最近有臺(tái)數(shù)據(jù)庫做了遷移,然后運(yùn)維人員過了一段時(shí)間發(fā)現(xiàn)這臺(tái)服務(wù)器非???,連遠(yuǎn)程登錄都要很久,下面記錄下其中的解決過程。
1、查看資源情況
可以發(fā)現(xiàn)內(nèi)存爆滿了,而排名第一的正是sqlserver的進(jìn)程
2、查看sqlserver內(nèi)存分配
SQL Server對(duì)服務(wù)器內(nèi)存的使用策略是用多少內(nèi)存就占用多少內(nèi)存,只用在服務(wù)器內(nèi)存不足時(shí),才會(huì)釋放一點(diǎn)占用的內(nèi)存,所以SQL Server 服務(wù)器內(nèi)存往往會(huì)占用很高。
可以看到遷移之前分配的內(nèi)存是10G,但遷移后的服務(wù)器只有8G內(nèi)存。
3、調(diào)整sqlserver內(nèi)存
這里可以把最大服務(wù)器內(nèi)存改成1G,確定后內(nèi)存就會(huì)被強(qiáng)制釋放,然后把最大服務(wù)器內(nèi)存改成合適的值。
4、查看內(nèi)存分配
正常只啟動(dòng)sqlserver服務(wù)器內(nèi)存消耗2.34G,打開F5客戶端到3.1G,也就是消耗0.7G內(nèi)存,最后打開下載數(shù)據(jù)的客戶端,應(yīng)該是下載數(shù)據(jù)都緩存到sqlserver內(nèi)存里面了,所以內(nèi)存一直在增加..目前穩(wěn)定在5.17G內(nèi)存,也就是這個(gè)下載消耗了2.2G內(nèi)存。
5、查看目前內(nèi)存狀態(tài):
DBCC MemoryStatus
這些內(nèi)存一般都是Sql Server運(yùn)行時(shí)候用作緩存的:
1) 數(shù)據(jù)緩存:執(zhí)行個(gè)查詢語句,Sql Server會(huì)將相關(guān)的數(shù)據(jù)頁(Sql Server操作的數(shù)據(jù)都是以頁為單位的)加載到內(nèi)存中來, 下一次如果再次請(qǐng)求此頁的數(shù)據(jù)的時(shí)候,就無需讀取磁盤了,大大提高了速度。
2)執(zhí)行命令緩存:在執(zhí)行存儲(chǔ)過程,自定函數(shù)時(shí),Sql Server需要先二進(jìn)制編譯再運(yùn)行,編譯后的結(jié)果也會(huì)緩存起來, 再次調(diào)用時(shí)就無需再次編譯。