SQL Server 内存占用高分析及解决办法(超详细)

一、问题

1.1、SQL Server内存占用高 ,内存不释放

1.2、SQL Server 内存使用策略

SQL Server对服务器内存的使用策略是有多少占多少(大约到剩余内存为4M左右)只用在服务器内存不足时,

才会释放一点占用的内存,所以很多时候,我们会发现运行SQL Server的系统内存往往居高不下这些内存一般都

是SQL Server运行时候用作缓存的。

数据缓存:

例如:你运行一个select语句,那么SQL Server会将相关的数据页(SQL Server操作的数据都是以页为单位的

SQL Server中页的大小始终是8kb的大小,页有不同的类型:数据页,索引页,系统页等等)加载到内存中进行

缓存,以便于再次请求此页的数据的时候,直接从内存返回,就无需读取磁盘了,大大提高了速度。

执行命令缓存:

如执行存储过程,自定函数时,SQL Server 需要先二进制编译再运行,编译后的结果也会缓存起来,再次调用时就无需再次编译。

二、解决办法

当我们知道SQL Server 内存占用方式,就有以下两种解决办法

  • 清除缓存

-- 查看内存使用情况,这个会返回多个结果集数据,可以有助于我们排查内存问题
DBCC MemoryStatus

结果集部分重要指标解释(请注意,DBCC MEMORYSTATUS的输出格式和内容可能会随着SQL Server版本的不同而有所变化):对指标不感兴趣,一股脑解决问题可跳过 如下指标查看,直接到下面 缓存清除命令

1、Total Server Memory (KB)

  • 含义:SQL Server实际使用的内存量(以千字节为单位)。
  • 重要性:这是SQL Server当前占用的实际物理内存大小,直接反映了SQL Server对系统资源的影响。如果这个值接近或超过了配置的最大服务器内存限制,可能表明存在内存压力。

2、Target Server Memory (KB)

  • 含义:SQL Server理想情况下想要保留的内存量(以千字节为单位),基于当前负载和配置参数计算得出的目标值。
  • 重要性:与Total Server Memory对比,可以帮助识别是否存在内存不足的情况。如果Total Server Memory远低于Target Server Memory,则可能是由于其他进程占用了过多的内存。

3、Memory Grants Outstanding

  • 含义:等待分配给查询的内存请求数量。
  • 重要性:此数字较大时,意味着有大量并发查询正在争夺有限的内存资源,可能导致查询延迟增加。长期保持高位可能需要调整最大内存设置或者优化查询。

4、Page Life Expectancy (PLE)

  • 含义:一个页面在缓冲池中停留而不被移出的平均时间(以秒为单位)。虽然PLE不是DBCC MEMORYSTATUS直接输出的字段,但可以通过sys.dm_os_performance_counters视图获取。
  • 重要性:PLE是一个重要的内存健康指标。较高的PLE值通常表示内存充足,而较低的PLE值(例如小于300秒)可能指示内存压力,因为页面被频繁地从缓存中移除。

5、Available Physical Memory (KB)

  • 含义:当前可用的物理内存量(以千字节为单位),即未被占用或预留的内存。
  • 重要性:了解系统的整体内存情况,帮助判断是否有足够的空闲内存供SQL Server和其他应用程序使用。低可用内存可能导致操作系统开始交换内存到磁盘,从而降低性能。

6、Available Paging File (KB)

  • 含义:当前可用的页面文件空间量(以千字节为单位)。
  • 重要性:尽管SQL Server尽量避免使用页面文件,但如果物理内存不足,它仍会依赖页面文件。因此,确保有足够的页面文件空间也很重要,但应尽量减少对它的依赖。

7、Percent of Committed Memory in WS

  • 含义:已提交的内存中位于工作集内的百分比。
  • 重要性:这个比率有助于理解有多少已分配给SQL Server的内存正被积极使用。高比例表明大部分内存都在活跃使用中,而低比例可能暗示有未充分利用的内存或存在过多的内存分配。

8、System Physical Memory Low

  • 含义:一个状态标志,表示系统物理内存处于“低”水平。
  • 重要性:当此标志为真时,意味着系统物理内存接近耗尽,可能需要采取行动来缓解内存压力,比如增加物理内存、优化查询或调整SQL Server的最大内存设置。

9、Page Faults

  • 含义:页面错误的数量,指的是尝试访问不在物理内存中的页面而触发的操作系统加载页面的行为次数。
  • 重要性:频繁的页面错误(特别是硬页面错误)可能指示内存不足,因为每次页面错误都会导致磁盘I/O操作,这将显著影响性能。

10、Memory Grants Pending

  • 含义:已提交但尚未完成处理的内存请求队列长度。
  • 重要性:如果这个值非零,意味着有内存请求在等待处理,这可能会延迟查询执行。长期存在的非零值可能指向内存争用问题。

11、Lock Pages in Memory Usage (KB)

  • 含义:如果启用了“锁页”选项,则该值表示用于锁定到物理内存中的页数量(以千字节为单位)。
  • 重要性:启用“锁页”可以防止SQL Server的工作集被换出到磁盘,提高性能。但是,这也减少了操作系统可用于其他进程的物理内存。

12、Large Pages Allocated (KB)

  • 含义:如果启用了大页支持,则显示已分配的大页内存量(以千字节为单位)。
  • 重要性:大页可以减少TLB(Translation Lookaside Buffer)丢失并提升性能。对于大型数据仓库或OLAP环境,启用大页支持可能会带来性能改进。

这些关键指标提供了关于SQL Server内存使用情况的全面视图,并且对于诊断性能问题非常有价值。通过定期监控这些指标,可以及时发现潜在的问题,并采取适当的措施来优化SQL Server的性能。此外,结合动态管理视图(DMVs),如sys.dm_os_memory_clerkssys.dm_exec_query_memory_grants等,以及性能计数器,可以获得更加详细的洞察力,从而更好地管理和调优SQL Server实例。

缓存清除命令

-- 临时清除缓存命令
DBCC FREEPROCCACHE --清除存储过程相关的缓存
DBCC REESESSIONCACHE --清除会话缓存
DBCC FREESYSTEMCACHE('All') --清除系统缓存
DBCC DROPCLEANBUFFERS --清除所有缓存

以上命令虽然会清除掉现有缓存,为新的缓存腾出空间,但是Sql server并不会因此释放掉已经占用的内存。Sql

Server并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整Sql Server可用的物理内存设

置来强迫它释放内存。

如果想让 Sql Server 主动释放 占用并空闲的内存空间,可以设置Sql Server占用内存的上限,就会让Sql server在

内存上限范围内,主动清除脏数据替换成热数据。因此还得如下操作

三、设置内存最大占用值

设置方式:

从自带的studio 连接,,在数据库服务器名称上点击【右键】,选择【属性】,然后,找到【内存】选项,在右边的【使用AWE分配内存】(sqlServer64的应该不用勾)左边把对勾打上。在最大服务器内存(MB)上填入适当的大小(具体填多大,肯定不能超过计算机的物理内存,建议控制在60%-75%),设置成功后重启

四、 其他

结果集图片:执行 DBCC MemoryStatus

最后文章有啥不对,欢迎大佬在评论区指点!!!

如果感觉对你有帮助就点赞推荐或者关注一下吧!!!

SQL Server 内存占用高分析及解决办法(超详细)的更多相关文章

  1. Sql Server 2008 卸载重新安装失败的解决办法!(多次偿试,方法均有效!)

    Sql Server 2008 卸载重新安装失败的解决办法!(多次偿试,方法均有效!) 1.控制面板中卸载所有带sql server的程序. 2.在C盘C:\Program Files中sqlserv ...

  2. 在Windows2008下安装SQL Server 2005无法启动服务的解决办法

    在Windows2012下安装SQL Server 2005无法启动服务的解决办法 1.正常安装任一版本的SQL Server 2005. 2.安装到SqlServer服务的时候提示启动服务失败  此 ...

  3. Sql Server 阻塞的常见原因和解决办法

    1. 由于语句运行时间太长而导致的阻塞,语句本身在正常运行中,只须等待某些系统资源 解决办法: a. 语句本身有没有可优化的空间 b. Sql Server 整体性能如何,是不是有资源瓶颈影响了语句执 ...

  4. sql server 2008 评估期已过期解决办法

    开始-->所有程序-->Microsoft SQL Server 2008-->配置工具-->SQL Server 安装中心-->维护-->版本升级,接着按照提示一 ...

  5. mds的cpu占用问题分析以及解决办法

    前言 mds是ceph里面处理文件接口的组件,一旦使用文件系统,不可避免的会出现一种场景就是目录很多,目录里面的文件很多,而mds是一个单进程的组件,现在虽然有了muti mds,但稳定的使用的大部分 ...

  6. C#内存占用大量资源的解决办法

    昨天,独立完成了一个项目,一直运行起,起初运行内存为15Mb左右,但是发现内存以每秒2Mb的速度增加,吓了我一跳(注:我实习生,我的工作中第一个项目).从头找寻对象,再来dispose,弄得我晕头转向 ...

  7. 在Windows2012下安装SQL Server 2005无法启动服务的解决办法

    下面是我亲自经历过的总结. 因为尝鲜安装了Windows2012,的确很不错,唯一的遗憾就是不支持Sql Server 2005的安装.找了很多办法,基本上都有缺陷.现在终于找到一种完全正常没有缺陷的 ...

  8. SQL Server 2008安装失败问题以及解决办法

    一.检测过程中重启失败解决办法 在键盘上按下组合键[Win]+[R],调出运行窗口. 在窗口中输入“regedit”,点击确定,打开注册表管理界面. 在注册表左侧目录栏中找到如下位置:“HKEY_LO ...

  9. SQL Server 2008 忘记sa密码的解决办法

    由于某些原因,sa和windows验证都不能登录 sql server,可以用独占模式,修改sa密码先在服务管理器停止Sql Server服务,然后打开命令行,进入 SQL Server安装目录,进入 ...

  10. (转)SQL Server 2008无法修改表的解决办法

    转自:http://www.soaspx.com/dotnet/sql/mssql/sql2008/sqlserver2008_20121010_9683.html 在SQL Server 2008 ...

随机推荐

  1. 关于MNN的OPENCL和Vulkan支持

    关于MNN框架推理的时候,通过调用库当中结构体的内容,可以切换选择创建Session的具体配置.关于结构的描述见官方文档: 官方文档--创建Session CPU是编译的时候默认选择的配置方式,通过文 ...

  2. Github第一Star数的国产免费开源防火墙--雷池社区版初步体验

    前言 近期准备搭建一个博客网站,用来存储工作室同学们的学习笔记.服务器准备直接放在公网上,方便大家随时随地的上传和浏览,为了防止网站被人日穿成为肉鸡,一些防御措施还是要部署的. 首先明确自己的需求: ...

  3. apache2和nginx卸载总是不干净不完全导致无法重装,重装成功也无法启动

    大着胆子把nginx卸载了用的命令是  sudo apt remove nginx 结果最后不知道怎么折腾的就算重新装也装不上了,然后就转头折腾apache2,也卸载了  sudo apt remov ...

  4. MySQL管理工具之Beekeeper Studio

    简介 Beekeeper Studio 是一个跨平台的 SQL 编辑器和数据库管理客户端,可以在 Linux.Mac.Windows 上使用. Beekeeper Studio 社区版是免费开源的,支 ...

  5. python之在线书籍

    人生苦短,我用python, 这里罗列一些可以查看python电子书的相关链接,平时没事多看看,一定会大有裨益!!! python3-cookbook[https://python3-cookbook ...

  6. Blazor 组件库 BootstrapBlazor 中CheckboxList组件介绍

    组件介绍 CheckboxList 多选框组控件用于创建多选的复选框组. 他的样子是这样的: 代码也很简单,绑定一个List就行了. <CheckboxList @bind-Value=&quo ...

  7. 关于被static修饰还可序列化的问题

    今天为了验证一下被static修饰的变量到底可不可以序列化,出现了以下的情况: 然后找到一条评论,豁然开朗 把序列化的内容注释掉,直接从序列化文件读取对象,就发现没有获取到

  8. Cython二进制逆向系列(一) 初识Cython

    Cython二进制逆向系列(一) 初识Cython   众所周知,Python类题目最难的一种就是使用Cython工具将py源码转换为二进制文件.此类题目相比于直接由Cpython编译而成的类字节码文 ...

  9. ChatGPT生成测试用例的最佳实践(二)

    这种测试用例还不够直观,能不能让其以表格的形式显示呢?笔者输入"请以表格形式展示,谢谢."提示词,ChatGPT输出的部分内容如图3-3所示. 图3-3  ChatGPT输出的部分 ...

  10. 【Amadeus原创】修改docker里面网站的port端口映射

    切记:以下顺序千万不能颠倒!否则不生效! 1. 查看需要修改的容器,记住container id docker ps -a 2. 停止容器 docker stop xxx 3. 修改容器的端口映射配置 ...