• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    SQL Server 内存占用高分析及问题解决办法

    发布者: 雪落无声 | 发布时间: 2025-6-18 09:16| 查看数: 43| 评论数: 0|帖子模式

    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 内存占用方式,就有以下两种解决办法


    • 清除缓存
    1. -- 查看内存使用情况,这个会返回多个结果集数据,可以有助于我们排查内存问题
    2. DBCC MemoryStatus
    复制代码
    结果集部分重要指标解释(请注意,
    1. DBCC MEMORYSTATUS
    复制代码
    的输出格式和内容可能会随着SQL Server版本的不同而有所变化):对指标不感兴趣,一股脑解决问题可跳过 如下指标查看,直接到下面 缓存清除命令
    1、Total Server Memory (KB)

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

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

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

    • 含义:一个页面在缓冲池中停留而不被移出的平均时间(以秒为单位)。虽然PLE不是
      1. DBCC MEMORYSTATUS
      复制代码
      直接输出的字段,但可以通过
      1. 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),如
    1. sys.dm_os_memory_clerks
    复制代码
    1. sys.dm_exec_query_memory_grants
    复制代码
    等,以及性能计数器,可以获得更加详细的洞察力,从而更好地管理和调优SQL Server实例。
    缓存清除命令
    1. -- 临时清除缓存命令
    2. DBCC FREEPROCCACHE --清除存储过程相关的缓存
    3. DBCC REESESSIONCACHE --清除会话缓存
    4. DBCC FREESYSTEMCACHE('All') --清除系统缓存
    5. DBCC DROPCLEANBUFFERS --清除所有缓存
    复制代码
    以上命令虽然会清除掉现有缓存,为新的缓存腾出空间,但是Sql server并不会因此释放掉已经占用的内存。Sql
    Server并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整Sql Server可用的物理内存设
    置来强迫它释放内存。
    如果想让 Sql Server 主动释放 占用并空闲的内存空间,可以设置Sql Server占用内存的上限,就会让Sql server在
    内存上限范围内,主动清除脏数据替换成热数据。因此还得如下操作

    三、设置内存最大占用值

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


    四、 其他

    结果集图片:执行 DBCC MemoryStatus

    到此这篇关于SQL Server 内存占用高分析及解决办法(超详细)的文章就介绍到这了,更多相关SQL Server 内存占用高内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/database/334449xci.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表