zoukankan      html  css  js  c++  java
  • 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

    作者:Owen Zeng
    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    每天一道LeetCode--141.Linked List Cycle(链表环问题)
    每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
    每天一道LeetCode--118. Pascal's Triangle(杨辉三角)
    CF1277D Let's Play the Words?
    CF1281B Azamon Web Services
    CF1197D Yet Another Subarray Problem
    CF1237D Balanced Playlist
    CF1239A Ivan the Fool and the Probability Theory
    CF1223D Sequence Sorting
    CF1228D Complete Tripartite
  • 原文地址:https://www.cnblogs.com/OwenZeng/p/5670315.html
Copyright © 2011-2022 走看看