【声明:本篇博客转载自http://www.cnblogs.com/ljhdo/p/5149401.html】html
最近一段时间的工做主要是与SQLSERVER数据库打交道,须要对SQLSERVER有一个比较全面的认识。故也在捉急的翻阅资料,学习这个经典的关系型数据库。sql
性能计数器(Performance Counter)是量化系统状态或活动的一个数值,Windows Performance Monitor在必定时间间隔内(默认的取样间隔是15s)获取Performance Counter的当前值,并记录在Data Collections中,经过Performance Monitor可以查看系统的性能数据,是故障排除的极佳工具。Performance Counter数量不少,若是不了解计数器的功能,在选择计数器时,每每不知所措。因为SQL Server 是IO密集型的应用程序,常常须要进行大量的读写操做,从Disk读取数据到内存,将内存中的数据写入到Disk,所以,Disk和内存是SQL Server的生命线,监控SQL Server 的性能,常常用到的性能计数器是Disk和内存。数据库
一,Disk性能监控windows
1,Disk的结构缓存
典型的机械Disk的结构主要有:磁头(head),磁道(track),扇区(sector),盘面(Platter),柱面(cylinder)和簇(cluster)。如图,服务器
当磁盘旋转时,若磁头保持在一个位置上,则每一个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹叫作磁道。磁盘上的每一个磁道被等分为若干个弧段,这些弧段是磁盘的扇区,每一个磁道上的扇区数量是相等的,每一个扇区存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,以扇区为单位。若干个连续的扇区组合为一个簇,文件存取是以簇为单位的。app
硬盘一般由重叠的一组盘片构成,每一个盘面都被划分为数目相等的磁道,并从外缘的"0"向中心开始编号,具备相同编号的磁道造成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。因为每一个盘面都有本身的磁头,所以,盘面数等于总的磁头数。所谓硬盘的CHS,是指Cylinder(柱面)、Head(磁头)、Sector(扇区),硬盘的容量=柱面数×磁头数×扇区数×512B。ide
扇区是能独立寻址的最小单位,簇是资源分配的最小单位。Disk的一次读写操做,由寻道,旋转延迟和数据传输组成,因为寻道和旋转延迟占用了读写操做的大部分时间,Disk在执行每次读写操做时,采起就近原则,读写连续的N个扇区,读写的数据量是4KB的整数倍。工具
2,顺序读写和随机读写性能
随机读写是指数据分布在不一样的磁道上,Disk的磁头必须移动磁道,才能读取到相应的数据;顺序读写是指数据分布在同一磁道的相邻扇区中,在读写数据时,Disk的磁头不须要移动磁道。因为,Disk的磁道移动是机械运动,“很慢”,占读写数据所用时间的绝大部分,所以,Disk的顺序读写速度远远高于随机读写速速,应尽可能避免随机读写。Disk,固态硬盘盒内存的读写速度对比:
3,硬盘性能计数器
在OS Level上,Windows在一块物理硬盘上分红多个逻辑分区,每个逻辑分区叫作一个Logical Disk,经过盘符标识,运行在Windows上的Application使用盘符来寻址。对于分配在同一块物理硬盘上的逻辑分区,共享物理硬盘的读写带宽,至关于在一块物理硬盘上工做。所以,Disk计数器分为两组:PhysicalDisk 和 LogicalDisk,LogcialDisk计数器记录每一个逻辑分区的读写计数,用于分析特定的Application在不一样的逻辑分区上的Disk IO活动和性能参数;PhysicalDisk计数器记录整个物理Disk的性能指标,用于了解Disk的响应速度,主要使用PhysicalDisk计数器,分析Disk的性能问题。
系统级常常用到的Disk性能计数器是PhysicalDisk计数器,LogcialDisk仅供参考:
avg.Disk sec/(Transfer,Read,Write),可以很好的反映Disk的IO速度,因此这三个计数值常常用来衡量Disk的IO速度:
二,系统物理内存性能计数器
SQL Server在运行的过程当中,会持续地向内存中加载大量数据,若是数据长期驻留在内存中,那么SQL Server 不须要申请Disk IO请求,就能直接访问数据,快速响应用户的请求。若是SQL Server访问的数据不在内存中,将会产生一个Hard Page Fault,那么SQL Server首先指示存储引擎将数据页从Disk加载到内存中,产生PageIOLatch等待,等到数据被加载到内存以后,SQL Server在内存中访问数据,处理用户请求,因为Disk 的IO速度较慢,延迟高,大量的Hard Page Fault将严重影响SQL Server响应用户请求的速度,所以,经常使用的系统级内存计数器跟缺页中断有关:
三,SQL Server的Buffer Manager计数器
Buffer Manager计数器用于监视SQL Server如何使用内存数据页和计划缓存,读取和写入数据页时的Disk IO。因为Buffer Pool是SQL Server内存最活跃,使用最多的部分,因此也是最容易出现性能瓶颈的部分,计数值尤为重要:
常用后四种计数器,探测系统的内存压力,前三种,仅供参考,在此,感谢 wy123 的帮助。
四,SQL Server的Memory Manager计数器
Memory Manager计数器用于监控服务器内存整体使用状况,在一个很是繁忙的系统中,Lock内存和授予内存是经常使用的计数器:
五,使用Performance Counter监控SQL Server数据库系统的总体性能
建立两个Data Set:Disk Activity,用于监控物理磁盘的活动;Memory Activity ,用于监控系统内存的Hard Fault和SQL Server的内存使用。
下文摘抄自《硬盘的读写原理》,做者是真实的归宿,写的很是详细:
访盘请求完成过程
当须要从磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即肯定要读的数据在哪一个磁道,哪一个扇区。 为了读取这个扇区的数据,须要将磁头放到这个扇区上方,为了实现这一点,磁头须要移动对准相应磁道,这个过程叫作寻道,所耗费时间叫作寻道时间,而后磁盘 旋转将目标扇区旋转到磁头下,这个过程耗费的时间叫作旋转时间。
即一次访盘请求(读/写)完成过程由三个动做组成:
所以在磁盘上读取扇区数据(一块数据)所需时间:Ti/o=寻道时间 +旋转时间 + n *传输时间
磁盘的读写原理
系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最早是第1磁道的第一磁头下(也就是第1盘面的第一磁道)的全部扇区,而后,是同一柱面的下一磁头,……,一个柱面存储满后就推动到下一个柱面,直到把文件内容所有写入磁盘。系统也以相同的顺序读出数据。读出数据时经过告诉磁盘控制器要读出扇区所在的柱面号、磁头号和扇区号(物理地址的三个组成部分)进行。磁盘控制器则直接使磁头部件移动到相应的柱面,选通相应的磁头,等待要求的扇区移动到磁头下。在扇区到来时,磁盘控制器对扇区进行读写操做。
局部性原理与磁盘预读
因为存储介质的特性,磁盘自己存取就比主存慢不少,再加上机械运动耗费,磁盘的存取速度每每是主存的几百分分之一,所以为了提升效率,要尽可能减小磁盘I/O。为了达到这个目的,磁盘每每不是严格按需读取,而是每次都会预读,即便只须要一个字节,磁盘也会从这个位置开始,顺序向后读取必定长度的数据放入内存。这样作的理论依据是计算机科学中著名的局部性原理:
预读的长度通常为页(page)的整倍数,页是计算机管理存储器的逻辑块,硬件及操做系统每每将主存和磁盘存储区分割为连续的大小相等的块,每一个存储块称为一页(在许多操做系统中,页得大小一般为4k),主存和磁盘以页为单位交换数据。当程序要读取的数据不在主存中时,会触发一个缺页异常,此时系统会向磁盘发出读盘信号,磁盘会找到数据的起始位置并向后连续读取一页或几页载入内存中,而后异常返回,程序继续运行。
拓展阅读:经常使用的系统内存性能计数器的描述
Page Faults/sec is the average number of pages faulted per second. It is measured in number of pages faulted per second because only one page is faulted in each fault operation, hence this is also equal to the number of page fault operations. This counter includes both hard faults (those that require disk access) and soft faults (where the faulted page is found elsewhere in physical memory.) Most processors can handle large numbers of soft faults without significant consequence. However, hard faults, which require disk access, can cause significant delays.
Page Reads/sec is the rate at which the disk was read to resolve hard page faults. It shows the number of reads operations, without regard to the number of pages retrieved in each operation. Hard page faults occur when a process references a page in virtual memory that is not in working set or elsewhere in physical memory, and must be retrieved from disk. This counter is a primary indicator of the kinds of faults that cause system-wide delays. It includes read operations to satisfy faults in the file system cache (usually requested by applications) and in non-cached mapped memory files. Compare the value of Memory\\Pages Reads/sec to the value of Memory\\Pages Input/sec to determine the average number of pages read during each operation.
Pages Input/sec is the rate at which pages are read from disk to resolve hard page faults. Hard page faults occur when a process refers to a page in virtual memory that is not in its working set or elsewhere in physical memory, and must be retrieved from disk. When a page is faulted, the system tries to read multiple contiguous pages into memory to maximize the benefit of the read operation. Compare the value of Memory\\Pages Input/sec to the value of Memory\\Page Reads/sec to determine the average number of pages read into memory during each read operation.
Pages/sec is the rate at which pages are read from or written to disk to resolve hard page faults. This counter is a primary indicator of the kinds of faults that cause system-wide delays. It is the sum of Memory\\Pages Input/sec and Memory\\Pages Output/sec. It is counted in numbers of pages, so it can be compared to other counts of pages, such as Memory\\Page Faults/sec, without conversion. It includes pages retrieved to satisfy faults in the file system cache (usually requested by applications) non-cached mapped memory files.
参考文档:
Measuring Disk Latency with Windows Performance Monitor (Perfmon)
SQL Server disk performance metrics – Part 1 – the most important disk performance metrics