内存概念:

Working Set = Private Bytes + Shared Memory

Working Set:某个进程的地址空间中,存放在物理内存的那一部分

Private Bytes:某个进程提交的地址空间(Commited Memory)中,非共享的部分

Shared Memory:对多个进程可见的内存,或存在于多个进程的虚拟地址空间。例如如果两个进程使用相同的DLL,只要该DLL代码装入内存一次,其他所有映射这个DLL的进程只要共享这些代码就可以了

Virtual Address Space :2的64次方。Windows会自行决定什么时候放在Physical Memory,什么时候放在Paging file

Reserved Memory:应用程序会先Reserve一块内存的地址空间

Committed Memory:将Reserve的内存页面正式Commit使用,Commit的页面会最终转换到Physical Memory中的有效页面

Memory Leak:一直不断的Reserve或Commit内存资源,即使不再被使用也不会释放给其他用户使用

Page Fault:访问一个存放于Viratul Address Space,但不存在于物理内存(Working Set)的页面,就会发生Page Fault。如果目标页面存放于硬盘(例如Pageing File),则会进行硬盘读写,称之为Hard Fault。如果已经存在在物理内存中,但是还没有直接放在这个进程的Working Set下,则需要Windows重新定向一次,不会带来硬盘读写,称之为Soft Fault。由于Soft Fault一般不会带来性能影响,因此一般不使用该计数器,而是使用Pages/sec

Committed Bytes:整个Windwos系统(包括Windows自身及其所有用户进程)使用的内存总数,包括Physical Memory和Paging file中的数据

Pages/sec:Hard Page Fault每秒钟需要从磁盘上读取或写入的页面数目(包括Windows和所有应用进程的所有磁盘Paging动作)
Pages/sec = Memory:Pages Input/sec + Pages Output/sec

Page File:%Usage和Page File:%Peak Usage :反映Paging File使用量的多少。数据在Paging File中存的越多,说明Physical Memory和实际需求量差距越大,性能越差

=================================================================================

Windows系统自身内存使用情况:
一般情况下在64为机器上,使用1-2GB左右。如果由于一些硬件驱动造成了内存泄露,则Windows可能会占用到几GB甚至更多的内存。

系统的Working Set,也就是系统使用的物理内存量,包括高速缓存、页交换区、可调页的ntoskrnl.exe、驱动程序代码和系统映射图等

Cache Bytes:系统使用的物理内存数目

Cache Bytes = System Cache Resident Bytes + System Driver Resident Bytes + System Code Resident Bytes + Pool Paged Resident Bytes

Memory:System Cache Resident Bytes(System Cache):系统高速缓存消耗的物理内存。高速缓存的主要功能是提高文件读写速度(例如读写超大文件)

赋予SQL服务账号“Lock Pages in Memory”权限,以便SQL Server可以将自己所申请的内存锁定放在物理内存中,企业版自动启用该功能。但是NonbufferPool的内存不受限制

SQL Server作为一个用户态为主的应用程序,还是会受限于核心态。如果核心态里发出内存要求,SQL Server就会被迫把自己的内存释放出来。用户态永远也抢不过核心态。

  

=================================================================================

检查某个进程的内存使用情况:
Process:Working Set

Process:Private Bytes

Process:Virtual Bytes:某个进程所申请的Virtual Address Space,包括Reserved Memory和Committed Memory

如果系统内存有瓶颈,磁盘一般也会很忙,paging也会较多;但如果磁盘很忙,但是paging不高,就不能说明系统内存有瓶颈

=================================================================================

SQL Server内存:
Traget Server Memory:SQL Server在理论上能够使用的最多的内存量。如果在SQL Server中设置了 Max Server Memory,则会使用该值作为内存上限

Total Server Memory:SQL Server自己分的代码申请的Buffer Pool空间大小,所有的Database Cache和大部分的Consumer(Connection、Query Plan、

Optimizer等)都保存在Buffer Pool中,对于一些特别长的语句的Query Plan、Optimizer等内存使用一部分的Multi-Page

Buffer Pool = Max Server Memory 或 SQL physical memory-Multi-page

Max Server Memory是Buffer Pool的上限,但不是SQL Server所有内存使用的上限。SQL Server内存的使用包括Buffer Pool和MemToLeave,所以SQL Server实际内存使用量一定大于Max Server Memory。但在正常情况下,MemToLeave的使用会远小于Buffer Pool,控制好Buffer Pool,基本上就控制住了SQL Server的整体内存使用量。 
 
Traget Server Memory和Total Server Memory都是指逻辑上的内存空间大小,而不是物理内存空间大小。数据是存放在page file还是物理内存中是由Windows决定的。

SQL Server内存使用分类:

按申请方式分类:

对Database Cache,会先Reserve,再Commit。其他的所有内存使用,基本都是直接Commit,都是Stolen(Memory Leak)

按申请大小分类:

对于所有小于或等于8KB的,直接分配给一个页面:8KB。所有这些页面都集中管理,这块内存被称为Buffer Pool,一次一个页面的分配被称为Single page Allocation

对于大于8KB的内存申请,会被集中在另外一个区域,成为Multi-Page(或MemToLeave),这种分配称为Multipl Page Allocation

SQL Server性能计数器使用:

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

Ttotal Server Memory(KB)

Traget Server Memory(KB)
Optimizer Memory(KB):服务器正在用于查询优化的动态内存总数

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

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

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

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

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

Buffer Manager:用于监视内存如何使用

Buffer Cache Hit Ratio:在缓冲区高速缓存中找到而不需要从磁盘中读取的页的百分比。经过很长时间后,该比率的变化应该很小,基本应该在99%以上。如果小于95%,通常就有了内存不足的问题。可以通过增加SQL Server的可用内存来提高

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

Free pages:所有空闲可用的总页数。当这个值降低是就说明SQL Server正在分配内存给一些用户。当这个值下降到比较低的值时(例如只剩几百个page了),SQL Server就会开始做Lazy Write,把一些内存让出来,所以该值一般不会为0.但如果该值反复降低,就说明内存存在瓶颈。一个没有内存瓶颈的SQL Server的Free Pages会维持在一个稳定的值 
 
Lazy writes/sec:每秒被缓冲区管理器的Lazy writer写入的缓冲区数。Lazy writer是一个系统进程,用于呈批刷新脏的老化的缓冲区(包括更改的缓冲区,必须将这些更改写回磁盘,才能将缓冲区重用于其他页),并使他们可用于用户进程。当SQL Server感觉到内存压力时,就会将最久没有被重用到的数据页和执行计划清理出内存。这些数据页和执行计划,就被称为“老化的缓冲区”,这个清理动作就是由Lazy writer完成的。所以如果SQL Server内存压力不大,Lazy writer就不会被经常触发。如果被经常触发,就应该是有内存瓶颈 
  
Page life expentancy:页若不被引用,将在缓冲池中停留的秒数。如果SQL Server没有新的内存需求,或者有空余的空间来完成新的内存需求,那么Lazy writer就不会被触发,页面会一直放在缓冲池中,Page life expentancy就会维持在一个较高的值。如果SQL Server出现了内存压力,Lazy writer就会被触发,Page life expentancy也会突然下降。所以如果Page life expentancy总是高高低低,SQL Server应该就出现了内存瓶颈 
 
Page reads/sec:每秒发出的物理数据库页读取数。此统计信息显示的是所有数据库间的物理页读取总数。如果用户访问的数据都缓存在了内存里,那么SQL Server就不需要从磁盘读取页面,不许需要做任何的Page reads。当SQL Server需要读取这些页面时,必须要为他们腾出内存空间。所以当Page reads/sec高时,一般Page life expentancy会下降,Lazy writes/sec会上升 
由于物理I/O开销大,Page Reads动作一定会影响SQL Server性能,可以通过使用更大的数据缓存、智能索引、更有效的查询或更改数据库设计等方法降低Page Reads

Page writes/sec:每秒执行的物理数据库页写入数。该值和内存使用没有什么关系,和Checkpoint pages/sec一样,更用户的修改量有关

Checkpoint pages/sec:由要求刷新所有脏页的检查点或其他操作每秒刷新到磁盘的页数。该值和内存压力没有直接关系,和用户行为有关。如果用户操作主要是读,Checkpoint值就比较小。如果很多操作都是Insert/Update/Delete,name内存中修改过的数据脏页就会比较多,每次Checkpoint的量也会较大。主要用来分析磁盘I/O

Stolen Pages:用于非Database Pages(包括执行计划缓存)的页数。这里就是Stolen Memory在Buffer Pool里的大小

Target Pages:缓冲池中理想的页数,乘以8KB,就应该是Target Server Memory的值

Total Pages:缓冲池中的页数(包括数据库页、可用页和Stolen页)乘以8KB,就应该还是Total Server Memory的值

SQL性能分析步骤:

1)当内存出现瓶颈时,会出现大量的paging动作,磁盘也就会很繁忙。所以要先解决内存瓶颈,才能降低I/O

2)分析磁盘性能是否正常,读/写是否已达到预期值,是读还是写繁忙

3)查看引起高I/O的操作类型(Page Reads、Page Writes、Lazy Writes、Checkpoints、Log Writes等)

动态性能视图:
select * from sys.sysprocesses

select * from sys.dm_os_wait_stats

select *from sys.dm_exec_requests

=================================

计数器(2分钟):

Processor\% Privileged Time
Processor\% Processor Time
Memory\Available Mytes
PhysicalDisk\Avg. Disk sec/Read
PhysicalDisk\ Avg. Disk sec/Write
SQLServer:SQL Statistics\Batch Requests/sec
SQLServer:Memory Manager\Target Server Memory (KB)
SQLServer:Memory Manager\Total Server Memory (KB)

Process(w3wp)\Working Set
Process(w3wp)\Private Bytes

SQL Server内存性能分析的更多相关文章

  1. SQL Server 内存开销分析

    第一步: 每一类资源用了多少内存. select          clerks.type,         sum(clerks.virtual_memory_reserved_kb) as Res ...

  2. SQL SERVER 查询性能优化——分析事务与锁(五)

    SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...

  3. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

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

    在数据库服务器中,内存是数据库对外提供服务最重要的资源之一, 不仅仅是Sql Server,包括其他数据库,比如Oracle,MySQL等,都是一类非常喜欢内存的应用. 在Sql Server服务器中 ...

  5. 人人都是 DBA(IV)SQL Server 内存管理

    SQL Server 的内存管理是一个庞大的主题,涉及特别多的概念和技术,例如常见的 Plan Cache.Buffer Pool.Memory Clerks 等.本文仅是管中窥豹,描述常见的内存管理 ...

  6. SQL SERVER 内存分配及常见内存问题 简介

    一.问题: 1.SQL Server 所占用内存数量从启动以后就不断地增加: 首先,作为成熟的产品,内存溢出的机会微乎其微.对此要了解SQL SERVER与windows是如何协调.共享内存.并且SQ ...

  7. 最有效地优化 Microsoft SQL Server 的性能

      为了最有效地优化 Microsoft SQL Server 的性能,您必须明确当情况不断变化时,性能将在哪些方面得到最大程度的改进,并集中分析这些方面.否则,在这些问题上您可能花费大量的时间和精力 ...

  8. SQL Server 内存中OLTP内部机制概述(四)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  9. 四项技术 助你提高SQL Server的性能

    有时,为了让应用程序运行得更快,所做的全部工作就是在这里或那里做一些很小调整.但关键在于确定如何进行调整!迟早您会遇到这种情况:应用程序中的 SQL 查询不能按照您想要的方式进行响应.它要么不返回数据 ...

随机推荐

  1. default parameter value for ‘color’ must be a compile-time constant

    定义了一个函数,函数有一个参数是Color类型的可选参数,想要设置其默认值为Color.Black http://stackoverflow.com/questions/2804395/c-sharp ...

  2. freemarker截取字符串

    [#if   a.title?length   lt   23   ]   ${a.title} [#else]${a.title[0..22]}...[/#if]

  3. log4j学习一:解决系统日志错位问题

    这两天,开发的系统遇到了一个非常奇怪的问题,我们的前台程序会将日志时而输出到webapp.log,时而输出到其他日志文件如AlarmThreshold.log中,初看并无规律,但秉着“机器永远不会出错 ...

  4. HHVM 是如何提升 PHP 性能的?

    背景 HHVM 是 Facebook 开发的高性能 PHP 虚拟机,宣称比官方的快9倍,我很好奇,于是抽空简单了解了一下,并整理出这篇文章,希望能回答清楚两方面的问题: HHVM 到底靠谱么?是否可以 ...

  5. light工具

    环境变量 C:\Users\zhangqm\AppData\Roaming\npm\; 安装 npm install -gd jresplus 不要用npm install -gd light pro ...

  6. 【 D3.js 高级系列 — 5.1 】 颜色插值和线性渐变

    颜色插值指的是给出两个 RGB 颜色值,两个颜色之间的值通过插值函数计算得到.线性渐变是添加到 SVG 图形上的过滤器,只需给出两端的颜色值即可. 1. 颜色插值 在[高级 - 第 5.0 章]里已经 ...

  7. jquery适用技巧

    jQuery对象与dom对象的转换 只有jquery对象才能使用jquery定义的方法.注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象. 普通的do ...

  8. (转载)php如何判断IP为有效IP地址

    (转载)http://www.kuitao8.com/20130918/1376.shtml 多数人看到这篇日志,第一印象肯定是以为是要讲如何通过正则表达式来判断. 非也,在php5.2.0之后,有专 ...

  9. HDU 5874 Friends and Enemies 【构造】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Friends and Enemies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  10. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]PrI.6.1

    Given a basis $U=(u_1,\cdots,u_n)$ not necessarily orthonormal, in $\scrH$, how would you compute th ...