《SQL调优日志--内存问题排查》要点:
本文介绍了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 内存使用可以分为缓冲池和非缓冲池内存.在开启了 锁定内存页 选项后,在任务管理器中只能看到非缓冲池内存部门. 那怎么查看另外一部门缓冲池的内存怎么呢.通过Total server memory 来查看.通过SQL SERVER :Memory Manager Total server memory 来查看
3.非缓冲池内存
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 TotalPagesKBFROM sys.dm_os_memory_clerks MGROUP BY M.typeORDER BY TotalPagesKB DESC
已经依照内存使用排序,找到使用内存最多的部分.分析使用的原因,并解决.
某客户的客户系统使用缓慢,通过上面的排除办法依次排查,最后找到是非缓冲池部分的 MEMORYCLERK_SQLOPTIMIZER占用内存太多造成
sp_configure N'show advanced options',1GOreconfigureGOsp_configure N'optimize for ad hoc workloads',1GOsp_configure N'show advanced options',1GOreconfigureGO
开启上面的选项后,内存仍然没有自动释放.重启SQL SERVER 服务,释放掉已经使用掉的内存.
https://simplesqlserver.com/2013/08/19/fixing-page-life-expectancy-ple/ 详细讲授PLE
《SQL调优日志--内存问题排查》是否对您有启发,欢迎查看更多与《SQL调优日志--内存问题排查》相关教程,学精学透。维易PHP学院为您提供精彩教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7837.html