SQL Server 内存占满卡死问题排查与优化(32G 服务器实战)
服务器从 16G 升级到 32G 后为 SQL Server 分配 24G 内存预留 8G 给操作系统。但出现典型问题SQL Server 启动后无任何访问依然快速占满 24G 内存导致服务器卡顿、无响应。执行DBCC FREEPROCCACHE清理缓存无效。本文基于真实生产环境排查从内存机制、分版本查询、配置优化、急救方案四个维度完整解决问题适用于SQL Server 2014 / 2016等主流版本。一、问题现象服务器内存32GBSQL Server 最大内存24GB24576MB现象无业务访问内存依然快速占满服务器卡顿、I/O 飙升、远程桌面卡顿清理执行计划缓存无效无慢查询、无大事务、无异常会话二、根本原因最重要通过内存分配器查询发现内存几乎全部被MEMORYCLERK_SQLBUFFERPOOL占用。这是 SQL Server 的正常设计机制不是 BugBuffer Pool 会尽可能占用max server memory以内的所有内存用于缓存数据无访问时也不会主动释放小内存服务器8G/16G/32G最容易出现 “占满即卡”真正导致卡死的原因系统预留内存不足 SQL Server 内存释放不及时。三、不同版本 SQL Server 内存查询脚本2014 / 2016由于 2014 与 2016 字段不兼容提供两套可直接运行脚本。3.1 SQL Server 2016 查询会话内存SELECT TOP 20 session_id AS SPID, (used_memory_kb / 1024) AS 占用内存MB, login_name, host_name, program_name FROM sys.dm_exec_sessions ORDER BY used_memory_kb DESC;3.2 SQL Server 2014 查询内存本文实战环境SELECT TOP 20 session_id AS SPID, (memory_usage * 8) / 1024 AS 占用内存MB FROM sys.dm_exec_sessions WHERE session_id 50 ORDER BY memory_usage DESC;3.3 通用内存分配器查询所有版本通用定位内存黑洞SELECT TOP 10 type AS 内存分配器, pages_kb / 1024 AS 占用MB FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;执行后你会发现BUFFERPOOL 占用 90% 内存。四、32G 服务器最优内存配置永久解决4.1 设置最大内存必须sp_configure show advanced options,1 RECONFIGURE sp_configure max server memory (MB),24576 RECONFIGURE4.2 优化内存释放防止系统卡死sp_configure min server memory (MB),0 RECONFIGURE sp_configure optimize for ad hoc workloads,1 RECONFIGURE作用让 SQL Server 能主动释放内存避免执行计划缓存无限膨胀4.3 服务器已卡顿时急救脚本DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS注意仅临时缓解不能根治。五、为什么清缓存没用DBCC FREEPROCCACHE只清执行计划真正占内存的是BUFFERPOOL数据缓存清理数据缓存才能降内存但会影响性能六、3 步标准排查流程查会话是否有异常查询占用内存查分配器是否为 BUFFERPOOL 正常占用查系统系统可用内存是否不足七、不同内存服务器推荐配置表格总内存SQL 最大内存系统预留8G40964G16G102406G32G245768G64G5120014G八、总结SQL Server 占满内存是正常机制卡死原因系统内存不足 释放不及时解决三要素限制最大内存开启即席工作负载优化保证系统预留足够内存按照本文配置后内存可稳定运行不再出现无访问占满卡死问题。版权声明本文基于真实生产环境实战总结更详细的排查过程与脚本说明可参考本人博客https://www.lnmpweb.cn/archives/7462
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2444713.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!