SQLServer内存使用分析方法

SQL Server 内存使用的分析方法

SQL Server内存性能计数器的分析方法.

Memory Manager:监视服务器内存总体使用情况的计数器。

常用的计数器如下。

1、Total Server Memory (KB)从缓冲池提交的内存(KB )。

注意:这不是SQL Server使用的总内存,而是Buffer Pool的大小。

2、Target Server Memory (K B ) :服务器能够使用的内存总量。当Total Server Memory 小于Target Server Memory时,说明SQL Server还没有用足系统能够给SQL Server的所有内存。SQL Server会不断地缓存新的数据页面和执行计划,而不会对这两部分缓存作清理。这样SQL Server的内存使用量会逐渐增加。当Target Server Memory因为系统内存压力变小时,它可能会小于Total Server Memory。只要这样的事情发生,SQL Server会很努力地清理缓存,降低内存使用量,直到Total Server Memory和Target Server Memory 一样大为止。

3、下面这几个计数器反映了内存的分布情况。

1) Optimizer Memory ( KB ):服务器正在用于査询优化的动态内存总数。

2) SQL Cache Memory ( KB ):服务器正在用于动态SQL Server高速缓存的动态内存总数.

3) Lock Memory ( KB ):服务器用于锁的动态内存总量

4) Connection Memory ( KB ):服务器正在用来维护连接的动态内存总量

5) Granted Workspace Memory ( K B ) :当前给予执行哈希、排序、大容量复制和索引创建操作等进程的内存总量.

6) Memory Grants Pending:等待工作空间内存授权的进程总数。如果这个值不等于0, 就说明当前有一个用户的内存申请由于内存压力而被延迟。一般来讲,这就意味着有比较严重的内存瓶颈。

由于Buffer Pool是SQL Server内存最活跃、使用最多的部分,所以也是最容易出现性能瓶颈的部分。这一部分的计数器也就尤其重要。

7)Buffer Cache Hit Ratio:在缓冲区高速缓存中找到而不需要从磁盘中读取的页的百分比。该比率是缓存命中总次数与过去几千次页面访问的缓存査找总次数之比。经过很长时间后,该比率的变化应该很小,基本都应该在99%以上。8)Checkpoint pages/sec:由要求刷新所有脏页的检查点或其他操作每秒刷新到磁盘的页数。这个计数器的值和内存有没有压力倒没什么直接的关系。相反,它和用户的行为有关。如果用户的操作主要是读,就不会有很多数据改动的脏页,checkpoint的值就比较小。相反,如果用户做了很多Insert/Update/Delete, 那么内存中修改过的数据脏页就会比较多,每checkpoint的量也会比较大。这个值在分析Disk I/O问题的时候反而用得比较多。

9)Database pages:缓冲池中有数据库内容的页数。也就是所谓的Database Cache的大小

10)Free pages:所有空闲可用的总页数。当这个值降低时,就说明SQL Server 正在分配内存给一些用户。当这个值下降到比较低的值时(例如,只剩几百个Page 了),SQL Server就会开始做Lazy Writes,把一些内存腾出来。所以一般这个值不会为0。但是如果它反复降低,就说明SQLServer存在内存瓶颈。

一个没有内存瓶颈的SQL Server的Free Pages会维持在一个稳定的值。11)Lazy writes/sec:每秒被缓冲区管理器的惰性编写器(Lazy writer)写人的缓冲区数。惰性编写器是一个系统进程,用于成批刷新脏的老化的缓冲区(包含更改的缓冲区,必须将这些更改写回磁盘,才能将缓冲区重用于其他页),并使它们可用于用户进程。前面讲过,当SQL Server感觉到内存压力的时候,就会将最久没有被重用到的数据页和执行计划清理出内存。这些数据页和执行计划,就被称为老化的缓冲区,而这个清理的动作,就是由Lazy writer完成的。所以如果SQLServer内存压力不大,Lazy writer就不会被经常触发。如果被经常触发,那么应该是有内存的瓶颈。

12) Page life expectancy:页若不被引用,将在缓冲池中停留的秒数。如果SQL Server没有新的内存需求,或者有空余的空间来完成新的内存需求,那么Lazy writer就不会触发,页面会一直放在缓冲池里。那么Page Life Expectancy就会维持在一个比较高的水平。如果SQL Serve出现了内存压力,Lazy writer就会被触发,Page Life Expectancy也会突然下降。所以如果一个SQL Server 的Page Life Expectancy 总是高高低低,不能维持在一个稳定的水平上,那这个SQL Server应该是有内存压力的。

13)Page reads/sec:每秒发出的物理数据库页读取数。此统计信息显示的是所有数据库间的物理页读取总数。如果用户访问的数据都缓存在了内存里,那么SQL Server就不需要从物理磁盘上读取页面。对于一个内存非常充裕的SQL Server,运行了一段时间后,理论上来讲,应该能把自己要的数据全都缓存在内存里,不需要再做任何Page Reads。所以这个值从一个侧面反映了SQL Server 的内存是否不足。而当SQL Server需要读这些页面时,必须要为它们腾出内存

相关文档
最新文档