你的位置:首页 > 软件开发 > 数据库 > Sql Server 内存相关计数器以及内存压力诊断

Sql Server 内存相关计数器以及内存压力诊断

发布时间:2016-05-22 17:00:04
在数据库服务器中,内存是数据库对外提供服务最重要的资源之一,  不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用.  在Sql Server服务器中,最理想的情况是Sql Server把所有所需的数据全部缓存到内存中,但是这 ...

  在数据库服务器中,内存是数据库对外提供服务最重要的资源之一,

  不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用.

  在Sql Server服务器中,最理想的情况是Sql Server把所有所需的数据全部缓存到内存中,但是这往往也是不现实的,因为数据往往总是大于可用的物理内存

  可以说内存是否存在压力能够直接决定数据库能否高效运行,同时,如果内存出现压力,同时也会影响到CPU的使用和存储性能,可以说是一损俱损,具有连带性。

  那么,如何识别内存是否存在压力,如何判断一台服务器上是否存在内存瓶颈?

 

Sql Server 2012之后,对内存的管理进行了大刀阔斧的改革,所有的内存管理都受Max Server Memory的控制

如下截图所示的最大服务器内存设置(当然这个截图是我本机上一个测试实例,这里并不说明内存该怎么配置)

Sql Server 内存相关计数器以及内存压力诊断

而大多数的内存量化都涉及到Sql Server的Buffer Pool,一个内部的缓存管理器,

可以说,Sql Server2012之后,所有内存的管理都受到Max Server Memory的控制。

同时,Sql Server在运行的过程中,会将各种内存的参数情况记录下来,这对我们去判断Sql Server内存压力有着非常重要的参考意义

下面提到的部分计数器的就存储在sys.dm_os_performance_counters这个系统视图中

Sql Server 内存相关计数器以及内存压力诊断

 

 

我们抽取其中最重要的几个来做解释说明:

  1. Page Life Expectancy
  2. Buffer Cache hit ratio
  3. Page reads / sec
  4. Page writes / sec
  5. Lazy writes / sec
  6. Total Server Memory
  7. Target Server Memory
  8. Paging File % Usage

需要注意的是,不能通过上述某一个值就武断地断定内存瓶颈,各个计数器之间是有一定的关系的,要结合多个值来做谨慎的分析判断。

 

 

  • Page Life Expectancy

  Page Life Expectancy又简称位PLE,含义是内存页面在内存中停留的平均时间,在系统视图sys.dm_os_performance_counters中可以查到,单位是秒,

  需要注意的是它不是指某一个page的最大值或者最小值,而是所有由所有页面停留在buffer pool中的时间计算出来的一个平均值

  如果这个值越大,说明Sql Server在检索数据时候直接从buffer pool中获取数据的概率越大,

  如果Sql Server直接从buffer pool中检索到数据,那么就不用去磁盘中去查询,因为直接从内存中获取数据的效率要远远高出从磁盘中去获取数据

  因为从内存中查询数据的延迟是纳秒级的,而从磁盘获取数据的延迟是毫秒级的,这之间差了两个数量级,可见从缓存中获取数据和从磁盘中获取数据,对性能的影响有多大

  那么PLE这个值多少位正常呢?我发现很多资料上多这个值都有误解,说是300S,300S是在十多年前的一个参考值,是基于当时的服务器内存受到4GB内存的限制的影响得到的,

  目前服务器内存动辄超过100GB的情况下,用同样的标准,显然是不够准确的,这个值的计算是跟具体的服务器内存配置有关的

  具体我就不做进一步的解释,可以参考如下链接

  https://simplesqlserver.com/2013/08/19/fixing-page-life-expectancy-ple/

  一个可供参考的标准算法是 Max Buffer Pool(GB)/4*300(S)

  这个值可以通过sys.dm_os_performance_counters 这个系统视图直接查询得出

select * from sys.dm_os_performance_counters where object_name like '%Buffer Manager%' and counter_name='Page life expectancy'

原标题:Sql Server 内存相关计数器以及内存压力诊断

关键词:sql

sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。