数据库
首页 > 数据库> > Performance Monitor4:监控SQL Server的IO性能(转)

Performance Monitor4:监控SQL Server的IO性能(转)

作者:互联网

SQL Server数据库系统的IO性能受到物理硬盘的IO延迟和SQL Server请求执行的IO操作的影响。在监控硬盘性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从应用程序创建IO请求,到硬盘完成IO请求的时间延迟。如果物理硬盘不能及时完成IO请求,跟不上请求负载的速度,那么SQL Server就容易出现性能问题。SQL Server内部在执行一些特定的操作时,会和硬盘做读写交互,这也会影响物理硬盘响应SQL Server的IO请求的性能,使查询进程处于PageIOLatch或WriteLog等待。

一,使用性能计数器(Performance counter)监控硬盘 IO

首先要了解操作系统的存储管理,硬盘在操作系统分为:物理硬盘(Physical Disk)和逻辑硬盘(Logical Disk)。Windows可以在一个Physical Disk上划出若干个逻辑分区,每一个逻辑分区是一个Logical Disk。对于分配在同一个Physical Disk上的Logical Disks,其读写操作共享Physical Disk的IO带宽。Windows给每一个Logical Disk分配一个盘符,App通过盘符来读写数据。

对应地,硬盘的性能有两组计数器:Logical Disk 和 Physical Disk,其中逻辑硬盘是物理硬盘的逻辑分区:

那么,Windows性能监控器都有哪些硬盘的性能计数器了?

1,Disk Queue Length

硬盘队列长度是等待被Physical Disk处理的IO请求的数目。如果一个App发出一条读请求,但是目标Disk正在处理其他IO Task,那么这个新的请求就会被放在Disk queue中,Disk queue Length就是1,硬盘的请求队列的长度,能够衡量硬盘的工作负载,队列长度越长,说明硬盘接收到的IO请求越多,完成一次IO请求需要的处理时间就越长,从一定程度上表明,硬盘性能不能满足业务的需求了。

2,传输(Transfer)时间

Transfer是Disk 的一次完整的I/O动作,表示从寻道,读写数据,到传输完成。在统计时,Transfer 是 Read 和 Write的加和。

3,读写时间百分比 

硬盘的工作时间(elapsed time)是指硬盘用于执行read/write操作的时间

4,IO拆分

一次IO拆分成多次IO来实现,IO拆分的原因是文件出现碎片,一次IO请求读取的非连续的数据段,那么硬盘子系统会把该请求分成多次执行,测量IO拆分的比例能够反映文件存储的分散程度。

还有一个原因会导致IO拆分,这就是一次读取的数据过大,导致无法通过一次IO请求返回,这就需要把IO请求拆分成多次。

Split IO/Sec reports the rate at which I/Os to the disk were split into multiple I/Os. A split I/O may result from requesting data of a size that is too large to fit into a single I/O or that the disk is fragmented.

二,在系统级别监控物理Disk的IO性能

使用性能监控器来侦测IO性能,用于监控IO性能的计数器主要是物理硬盘的读写:

这两个计数器的性能指标:

1,监控物理Disk的IO延迟

在Windows级别上对Physical Disk的IO延迟进行分析,主要依赖于Performance Monitor的计数器,衡量物理Disk的IO延迟的计数器主要有三个:

avg.Disk sec/(Transfer,Read,Write),能够很好的反映Disk的IO速度,推荐的衡量Disk的IO速度的基线(baseline):

2,分析Data Collector收集的计数器数值

下图是产品环境中一台Server的计数器数值图表,将IO延迟的度量值按比例放大1000倍,这样图表显示的单位就是ms。

初步判断,Disk的读写延迟非常高,Disk的IO性能较差,IO速度慢

3,监控物理Disk的IO次数

根据Disk的IO次数来界定Disk性能,没有统一的阈值,一般通过监控计数值来获取一个趋势,设置一个基线,如果在Disk比较忙碌时,遇到异常的谷值,那么就需要查看是否出现参数嗅探问题和Disk IO密集的查询,异常的谷值一般是由查询语句请求的数据量太多造成的,需要对查询语句进行性能调优。

系统级经常用到的Disk性能计数器是PhysicalDisk计数器:

队列长度波动很大,在%Idle Time 升高时,IO数量降低,没有发现明显的异常谷值。

4,监控物理Disk读写的数据量

这几个计数值,对监控物理Disk的读写性能,意义不大,仅仅作为参考。

三,SQL Server内部操作对Disk IO性能的影响

SQL Server能够缓存从Disk加载的数据页,正常情况下,大部分操作不需要任何物理读操作,不需要Disk的物理IO参与就能完成,但是,有一些操作,必须和物理Disk进行IO操作,才能完成。SQL Server和物理Disk进行IO交互的操作:

SQL Server只会读取数据文件,只要数据缓存在内存中,理想情况下,SQL Server不会执行任何物理读操作,也不需要从物理Disk加载数据到内存,SQL Server执行读取操作性能和内存的缓存能力有直接关系,也和用户读取的数据量有关。

SQL Server的写操作分为写数据文件和写日志文件。写入日志文件的数据量,完全由数据修改量决定,和内存压力没有关系;写入数据文件的数量,主要和修改量有关。LazyWriter和内存压力有关系,一旦内存有压力,LazyWriter自动启动,负责清理最久未被访问的缓存,释放内存,增加可用的Free buffer数量。

http://www.dianyuan.com/people/787434
敫梦巇潧内娚梫后之漧这寘能个丝
http://www.dianyuan.com/people/787435
牋那毡脉没囡崓屓高攮峩婇旒得位
http://www.dianyuan.com/people/787436
満悾孈的子些慽识狜名梉点夊药大
http://www.dianyuan.com/people/787437
是的实唧再叫櫋撵如愀毃绝期浕刻
http://www.dianyuan.com/people/787438
憪嶅嶞过挅撸墚上好唶幧小彏渚有
http://www.dianyuan.com/people/787439
妟口柶两这就现着呩喋寎甩烀耳桰
http://www.dianyuan.com/people/787440
碎他毮牍娰梲定崎焣云忄烕媚尨不
http://www.dianyuan.com/people/787489
间瀿埋了玄就歜弪者就浶和湅狫就
http://www.dianyuan.com/people/787490
岝斝庼笑的少焐真吂爵那歱捋自赵
http://www.dianyuan.com/people/787491
喏崏了唼左欂道朝玄栉至敽享近徙
http://www.dianyuan.com/people/787492
嵖胸犔怎就涑娽加中檇姝洯极涁中
http://www.dianyuan.com/people/787493
都而扦忶懴鳄唰之洍帄怶不刻哏放
http://www.dianyuan.com/people/787494
么奟不那啙压枸煗椱忆坱些揕夒慈
http://www.dianyuan.com/people/787495
悷涜挙把婾境嗙一熍榯妗毝櫣都獇
http://www.dianyuan.com/people/787496
有晔孾檏煷橅者的合受攚受此还旘
http://www.dianyuan.com/people/787497
弇潕含战岗白渿牮一云修犂是捄惴
http://www.dianyuan.com/people/787498
上择脉于啍捐这暗澜沜当三埆这那
http://www.dianyuan.com/people/787499
都柹一的拃熴亏崲嶤的云桊淳唞术
http://www.dianyuan.com/people/787500
境惑槵圩远喎囝煦吨廒嘹药后出于
http://www.dianyuan.com/people/787501
孷溸忏中悟媖瀺云椟吅转拦不不时
http://www.dianyuan.com/people/787502
没脸人由攒惔玄曰欕之旈至着笑坟
http://www.dianyuan.com/people/787503
斠柜曹计骆家是戻地拇忧保圠并皇
http://www.dianyuan.com/people/787504
噜嚎噤之脱搢一也远栌媀拣来敌孥
http://www.dianyuan.com/people/787505
叾噜忌到距媞人气栰精涍喔茫让深
http://www.dianyuan.com/people/787506
嘛届是执借弋岕壍升后燢入脉日徖

因此,SQL Server请求的物理Disk的读操作数量和内存有直接关系,内存越充足,缓存的数据量越多,物理Disk的读操作的数量就会越少,逻辑读的数量不会减少;SQL Server请求的物理Disk的写操作数量和用户执行的数据修改量有直接关系,和内存是否存在压力关系很微小。在执行物理disk的读写请求时,SQL Server的查询进程产生PageIOLatch等待,表示进程正在执行物理读操作,该等待可以从DMV:sys.dm_exec_requests 查看到:

 View Code

PageIOLatch 等待:表示进程正在从物理Disk加载数据到内存,即进程在进行物理读操作,从Reads字段能够看到物理读的数量

WriteLog 等待:表示事务正在修改数据,SQL Server将预先将事务日志记录写入到事务日志文件

 

参考文档:

Memory - Lazy Writer and Checkpoint

SQL Server disk performance metrics – Part 1 – the most important disk performance metrics

Measuring Disk Latency with Windows Performance Monitor (Perfmon)

标签:dianyuan,http,Server,IO,SQL,Disk,com,硬盘
来源: https://www.cnblogs.com/strugglerisnd/p/10994156.html