SQL调优日志--内存问题排查入门篇
概述
很多系统的性能问题,是由内存导致的。内存不够会导致页面频繁换入换出,IO队列高,进而影响数据库整体性能。
排查
内存对数据库性能非常重要。那么我当出现问题的时候,我们怎么排查性能问题呢?
存在问题
主要查看2个部分。页生命周期 Page Life Expectancy,和 lazy writer /sec.
页生命周期 的参考值在很久很久以前,很多同学可能看到过,建议值是300s。但是这是基于32位操作系统,最大只能使用4GB内存给出的。 Jonathan Kehayias and Ted Krueger 的书A Guide for the Accidental DBA 有给出一个当下的参考值:Buffer Pool / 4 GB * 300 。 当然这值只是一个参考值。如果你发现系统的页生命周期长期低于某个值,或者经常出现剧烈的波动,那说明内存可能存在问题。
lazy writer /sec 如果长期大于1 ,就需要关注了。
注意:如果你的系统使用了NUMA。可能会遇到lazy writer /sec 很高,但 Page Life Expectancy非常稳定的情况。这个问题不太常见,暂不详述。
内存分布
判断内存存在问题后,我们需要查看内存的分布。
1.总内存,使用中,可用内存
2.SQL SERVER使用的内存
注意
有的同学可能会遇到,服务器内存使用快满了,但是从上面图中看到的内存使用很少。内存被谁用掉了,是内存泄漏吗?当然不是。原因是SQL SERVER 内存使用可以分为缓冲池和非缓冲池内存。在开启了 锁定内存页 选项后,在任务管理器中只能看到非缓冲池内存部分。
3.缓冲池
这种情况下,怎么查看缓冲池的内存怎么呢?通过SQL SERVER :Memory Manager Total server memory 来查看
4.非缓冲池内存分布
SELECT M.type, SUM(M.virtual_memory_reserved_kb) AS VirtualMemoryReservedKB, SUM(M.virtual_memory_committed_kb) AS VirtualMemortCommitedKB, SUM(M.shared_memory_committed_kb) AS SharedMemroyCommittedKB, SUM(M.shared_memory_reserved_kb) AS SharedMemroyReservedKB, SUM(M.multi_pages_kb) AS MultiPagesKB, SUM(M.single_pages_kb) AS SinglePagesKB, SUM(M.multi_pages_kb)+SUM(M.single_pages_kb) AS TotalPagesKB FROM sys.dm_os_memory_clerks M GROUP BY M.type ORDER BY TotalPagesKB DESC
已经按照内存使用排序,找到使用内存最多的部分。分析使用的原因,并解决。
案例
某客户的客户系统使用缓慢,通过上面的排除方法依次排查,最后找到是非缓冲池部分的 MEMORYCLERK_SQLOPTIMIZER占用内存太多造成
解决
sp_configure N'show advanced options',1 GO reconfigure GO sp_configure N'optimize for ad hoc workloads',1 GO sp_configure N'show advanced options',1 GO reconfigure GO
开启上面的选项后,内存仍然没有自动释放。重启SQL SERVER 服务,释放掉已经使用掉的内存。
参考
https://simplesqlserver.com/2013/08/19/fixing-page-life-expectancy-ple/ 详细讲解PLE
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?