700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Sql Server 占用内存高 不释放内存 数据库连接不上 问题处理记录

Sql Server 占用内存高 不释放内存 数据库连接不上 问题处理记录

时间:2020-02-11 20:52:25

相关推荐

Sql Server 占用内存高 不释放内存 数据库连接不上 问题处理记录

问题:

项目上反应生产线箱码不能上传到我们系统,我们的WMS软件退出后重新登录也一直登录失败,并且服务器上数据库占用内存过高,SSMS数据库连接不上。

好家伙SQL Server占用了34个G内存。

接口日志中连接数据库报错:System.Data.SqlClient.SqlException: 当前命令发生了严重错误。应放弃任何可能产生的结果。

临时处理

趁着问题还在,然后查问题,查了半天没找到问题原因,最后重启服务器,让现场先用。

后面发现只需要在任务管理器中关闭SQL Server Windows NT-64Bit,然后在服务中重启SQL Server服务,不用重启服务器。

网上查资料

然后开始查资料,发现SQL server存在这个问题,我们给他分配多少内存,他就会不停的占用,中间不会释放,直到分配内存快要占满的时候才会释放一点点内存(官方文档:除非检测到内存压力,否则将不会释放内存)。大部分给的解决方案就是把内存分配到合理范围就行。

实际情况

我按照网上资料把数据库内存调整到7个G(大致),观察了一会儿,发现确实快达到7个G的时候,会清理一些。

(1月6日补充,可能是给的内存太小不够用)

但是,存在问题,我分配7个G,正常不会超过7个G内存,按理来说,快到7个G它会自动释放一些(网上说是不足4M时候).但是不知道什么情况下突然占用就超过了7个G导致SQL Server 无内存可用,然后拒绝所有新的连接(目前根据情况推测是这样导致的连接不上数据库)。

推测超过分配内存的原因可能是,数据库的表太大了,客户那边有人查询的时候会瞬间占用几十M的内存,瞬间超过了最多可用内存(分配7个G)。然后SQL Server就不管了,也不清理,直接摆烂???

尝试处理办法(利用电脑管家小火箭清理)

(实际使用中发现出现问题时候,还是没用清不掉,内存占用依然很高,记录下来)

无意中发现电脑管家的小火箭能够清理内存,SQL Server 占用很多内存,一下清空了。

但是总不能每天上来点一下腾讯电脑管家的小火箭吧。

然后一直找腾讯电脑管家自动发射火箭,结果没有找到,最多有一个自动清理垃圾。

在设置中发现了一个双击Alt按键就可以发射火箭清理内存。

然后想了一个“曲线救国”的办法。

服务器上有一个接口软件有定时任务,在定时任务中加了一段键盘双击Alt的代码。让定时任务触发双击Alt,然后发射火箭,清理内存。目前还在测试阶段。。。

//内存,可用空间PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");//16208是我电脑的全部内存(MB)Console.WriteLine($"清理前,内存占用:{(16208 - ramCounter.NextValue()) / 162}%");SendKeys.Send("%");//发送Alt就是用%。Thread.Sleep(100);SendKeys.Send("%");Thread.Sleep(5000);//等待5s,小火箭发射完成Console.WriteLine($"清理后,内存占用:{((16208-ramCounter.NextValue())/162)}%");

也许需要清理一下数据库中的某些表,删除一些历史数据才能好一些。

目前我这边处理是这样,不知道有没有其他处理办法。。

后续处理记录

.12.30记录

腾讯电脑管家火箭内存也没有用。

后来解决办法,还是把数据库的最大服务器内存改的特别大,后面暂时没有出现问题。

.01.06记录

怀疑是服务器上的容灾备份软件导致的数据库不能清理内存,导致数据库连接不上。

以下是官方给的文档。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。