sql server windows nt 64bit 内存占用过高解决办法

针对SQLServerExpress在WindowsNT64位环境下内存占用过高的问题,本文分享了从发现问题到定位原因,再到采取措施降低内存占用的全过程。通过调整SQLServer的内存使用策略,成功控制了内存消耗,实现了服务器资源的有效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存居高背景

本人业余从事淘宝客研究,是一个误入技术领域的非专业技术人员,业余时间用:asp.net+sql server express 搭建一个网站,网 址:爱尚偶乐分享,技术比较low,各位看官就请多见谅。

网站大约在2019年3月份上线,运行了半年之久,发现内存占用比例飙升,一度达到80-90%,网站只存储了淘宝联盟、多多客的推广链接,数据大约50-70M左右,以非专业人员评估,应该用不到那么大的内存空间,一直不明所以。

软件运行环境参数

在2018年12月12日,当晚做了冲动的决定,头脑一发热,按耐不出内心的想法,赶紧上阿里云买下ECS,系统配置如下:
服务器配置
购买ECS花费我近1700大洋,各位看官估计都认为我人傻钱多,据后来事实验证,我确实是人傻,但钱不多。
数据库配置
数据库方面,考虑自己对microsoft sqlserver最熟,另一个是出于对版权的考虑,再一个是轻量,所以采用express版本,至于与standard版本,是否有效率上的差异,我也拿不太准,有待进一步测试。

内存占用居高不下

ECS买了之后,不能一直闲置啊,么有办法,临时找了几本书asp.net的书,初入职场时干过一年的net.asp开发,多少心里还有点数,临时临为就编写自己的个人网站。前后大概用了三个月时间,一边看书,一边写代码,中间的过程,省略一万字,也算是历经千辛万苦,好歹是给搞出来的,哈哈,我还是有点小佩服自己,至少有8年我没有系统的写过代码了。

代码差不多码完了,直接部署到ECS上的IIS中,过程比较顺利,能正常仿问,后续的时间里,也不断迭带了一功能,也开发了mobile版,但一直没有关注系统性能问题,直到临近今年双十一,我上ECS看系统监控性能图表,吓到我了。
内存使用量
我上来看性能报表主要原因,是因为上线半年以来,并没有带来理想收益,一直处于亏损状态,淘宝客并没有我想像的那么好做,流量是个大问题,给我的感觉是,大家现在不是谈虎色变,而是谈“加微信”色变,谈微商色变,大家有么有这样的感觉。

为了让自己的钱包不至于太干瘪,目前流量也不太,就想着将服务器降配,降到2核4G上,我的钱袋子还能留点,但一看内存都飙到6-7G了,顿时给我浇了一盆冷水,毕竟做了大半年,现在放弃又很可惜,我该怎么办呢。

当时为了网站仿问效率比较高,采用memorycatch缓存技术,将首面内容、频道信息、分类信息、菜单信息以及页面主要参数进行了缓存,所对对内存要求比较高,但高到多少我心里也没有低,当时还沾沾自喜,用上了缓存技术。没办法,我只能泡到各大asp.net群里,问有没有办法降低内存的消耗,可能是我没有说清楚,搞了一周也没有问到好办法,问题就一直拖着。

内存高占用竟然降下去了

不知道什么原因,一下刺激我的脑回路,我服务器从买至今,都没有重启动过,试试万能启起行不行(之前帮朋友看过网吧,网管万技术,重启试试),哈哈,重启竟然生效。

事实告诉我,肯定是什么东东,偷偷的吃掉什么内存了,我就连续多天观察阿里云性能监控图表,哈哈,偷吃的贼被的逮到了。
内存占用图
服务启重启后,随时间的推移,内存占用又起来了。这到底是什么情况呢,还要不要人活了,活还是要活着,毕竟好死不如癞活着。

好吧,咱们再去找罪魁祸首,通过服务器任务管理器观察,发现进程sql server windows nt 64bit 占用内存达到1G左右,元凶终到找到了。
任务管理器监控图片

降内存的办法

解决的原理就是控制sqlserver消耗内存与释放内存的原因,经查文献和试验可知,SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,至少释放多少,完全由sql server控制,所以SQL Server 服务器内存往往会占用很高。

SQL Server提供数据库脚本查徇内存占用情况
sql script: DBCC MemoryStatus
数据库脚本执行情况
这些内存一般都是Sql Server运行时候用作缓存的:

  1. 数据缓存:执行查询语句,Sql Server会将相关的数据内容(Sql Server操作的数据都是以页为单位的)加载到内存中进行缓存,以便于再次请求此页的数据的时候,直接从内存返回,大大提高了提取效率。
  2. 执行命令缓存:在执行存储过程,自定函数时,Sql Server需要先二进制编译再运行,编译后的结果也会缓存起来, 再次调用时就无需再次编译。

其它DBCC管理命令
DBCC FREEPROCCACHE 清除存储过程相关的缓存
DBCC FREESESSIONCACHE 会话缓存
DBCC FREESYSTEMCACHE(‘All’) 系统缓存
DBCC DROPCLEANBUFFERS 所有缓存

以上命令虽然会清除掉现有缓存,为新的缓存腾出空间,但是Sql server并不会因此释放掉已经占用的内存。Sql Server并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整Sql Server可用的物理内存设置来强迫它释放内存。

限制Sql Server可用的物理内存设置步骤sqlserver设置
sql server设置
按以上步骤,设置sql占用内存的上限,就会让sqlserver在内存上限范围内,主动清除脏数据替换成热数据,不至少向吸血鬼一样,无休止占用内在。

这样我双十一就能顺利,将我的服务器下调一个档次,我也不担心用户的体验,如果有帮到各位,也请点一个赞,全是个人的真实经历。

### 回答1: SQL Server Windows NT - 64位是一种数据库管理系统,适用于64Windows NT操作系统。它可以处理大量数据,并提供效的数据存储和检索功能。SQL Server还提供了强大的安全性和可扩展性,使其成为企业级应用程序的理想选择。 ### 回答2: SQL Server是一种关系型数据库管理系统,它能够存储和处理结构化数据,帮助用户通过SQL语言进行数据操作和管理。Windows NT - 64 bit是一种64位操作系统,相比32位操作系统具有更的处理能力和更大的内存支持。 SQL ServerWindows NT - 64 bit的结合带来了许多好处,其中最重要的是性能的提升。64位操作系统可以处理更大的内存,这意味着它可以更好地支持SQL Server的大型数据库。当SQL Server需要执行大量的数据操作时,64位操作系统可以更快地处理复杂的计算任务。此外,64位操作系统还支持更效的多线程处理,这对于处理并发访问的数据库来说非常重要。 对于企业和组织而言,SQL ServerWindows NT - 64 bit的集成也带来了更好的数据安全性和更的可靠性。因为64位操作系统有更内存支持能力,所以SQL Server可以更好地掌控内存使用情况,从而避免内存泄漏等问题。另外,64位操作系统还支持更快的文件I/O操作,这意味着SQL Server可以更快地读取和写入数据文件。 总之,SQL Server Windows NT - 64 bit的结合是一个非常优秀的选择,它能够提供性能、可靠性和安全性的数据库解决方案,是企业和组织管理大型数据库的理想选择。 ### 回答3: SQL Server Windows NT -64位是Microsoft SQL Server数据库管理系统的一种版本。这一版本的SQL Server是根据Windows NT操作系统64位技术开发的。Windows NT是一种用于企业级的操作系统,可以支持多用户,具有很的性能、可靠性和安全性。 SQL Server Windows NT -64位版本相较于32位版本,其最大的优势在于内存管理。64位系统可以最大程度地利用物理内存,将内存限制扩展到更的水平。32位版本的SQL Server只能最大支持4GB的内存,而64位版本可支持更内存容量,这对于大型的企业级数据库非常重要。此外,64位版本有更的处理速度和更好的优化能力。在处理大量数据的场景下,这一优势尤其突出。 其他方面,SQL Server Windows NT -64位也支持更级别的安全性和可靠性。64位平台在硬件和软件层面都有更的容错能力,因此更适用于数据中心部署。在安全性方面,64位版本支持数字签名,可以提供更的数据保护。 总之,SQL Server Windows NT -64位是一个非常强大的数据库管理系统,适用于大型企业级数据库。它具有更内存管理能力、更好的处理速度和优化能力、更级别的安全性和可靠性。对于需要处理大量数据和需要级别数据保护的企业来说,64位版本是首选。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值