本篇文章主要介绍了"Sql Server 内存相关计数器以及内存压力诊断",主要涉及到SQL Server方面的内容,对于SqlServer感兴趣的同学可以参考一下:
在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜...
在数据库服务器中,内存是数据库对外提供服务最重要的资源之一,
不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用.
在Sql Server服务器中,最理想的情况是Sql Server把所有所需的数据全部缓存到内存中,但是这往往也是不现实的,因为数据往往总是大于可用的物理内存
可以说内存是否存在压力能够直接决定数据库能否高效运行,同时,如果内存出现压力,同时也会影响到CPU的使用和存储性能,可以说是一损俱损,具有连带性。
那么,如何识别内存是否存在压力,如何判断一台服务器上是否存在内存瓶颈?
Sql Server 2012之后,对内存的管理进行了大刀阔斧的改革,所有的内存管理都受Max Server Memory的控制
如下截图所示的最大服务器内存设置(当然这个截图是我本机上一个测试实例,这里并不说明内存该怎么配置)

而大多数的内存量化都涉及到Sql Server的Buffer Pool,一个内部的缓存管理器,
可以说,Sql Server2012之后,所有内存的管理都受到Max Server Memory的控制。
同时,Sql Server在运行的过程中,会将各种内存的参数情况记录下来,这对我们去判断Sql Server内存压力有着非常重要的参考意义
下面提到的部分计数器的就存储在sys.dm_os_performance_counters这个系统视图中

我们抽取其中最重要的几个来做解释说明:
- Page Life Expectancy
- Buffer Cache hit ratio
- Page reads / sec
- Page writes / sec
- Lazy writes / sec
- Total Server Memory
- Target Server Memory
- Paging File % Usage
需要注意的是,不能通过上述某一个值就武断地断定内存瓶颈,各个计数器之间是有一定的关系的,要结合多个值来做谨慎的分析判断。
Page Life Expectancy又简称位PLE,含义是内存页面在内存中停留的平均时间,在系统视图sys.dm_os_performance_counters中可以查到,单位是秒,
需要注意的是它不是指某一个page的最大值或者最小值,而是所有由所有页面停留在buffer pool中的时间计算出来的一个平均值
如果这个值越大,说明Sql Server在检索数据时候直接从buffer pool中获取数据的概率越大,
如果Sql Server直接从buffer pool中检索到数据,那么就不用去磁盘中去查询,因为直接从内存中获取数据的效率要远远高出从磁盘中去获取数据