瓶颈确认之IO瓶颈确认之第一篇

申明:个人浅见,如有任何错漏,或者误解,请急速在下方留言,有错必改,并在这里先谢谢指导 :)


在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能。

磁盘 I/O 性能监控的指标主要包括:


指标 1:每秒 I/O 数(IOPS 或 tps)
    对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和。

    当传输小块不连续数据时,该指标有重要参考意义。


指标 2:吞吐量(Throughput)
    指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为 Kbps, MB/s 等。

    当传输大块不连续数据的数据,该指标有重要参考作用。


指标 3:平均 I/O 数据尺寸
    平均 I/O 数据尺寸为吞吐量除以 I/O 数目,该指标对揭示磁盘使用模式有重要意义。

    一般来说,如果平均 I/O 数据尺寸小于 32K,可认为磁盘使用模式以随机存取为主;如果平均每次 I/O 数据尺寸大于 32K,可认为磁盘使用模式以顺序存取为主。


指标 4:磁盘活动时间百分比(Utilization)
    磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和处理命令(如寻道)处于活动状态。

    磁盘利用率与资源争用程度成正比,与性能成反比。

    也就是说磁盘利用率越高,资源争用就越严重,性能也就越差,响应时间就越长。

    一般来说,如果磁盘利用率超过 70%,应用进程将花费较长的时间等待 I/O完成,因为绝大多数进程在等待过程中将被阻塞或休眠。


指标 5:服务时间(Service Time)
    指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。

    其大小一般和磁盘性能有关,CPU/ 内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。

    如果该值持续超过 20ms,一般可考虑会对上层应用产生影响。


指标 6:I/O 等待队列长度(Queue Length)
    指待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。

  >2说明存在IO问题

    需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的I/O 等待队列长度。


指标 7:等待时间(Wait Time)
    指磁盘读或写操作等待执行的时间,即在队列中排队的时间。

    如果 I/O 请求持续超出磁盘处理能力,意味着来不及处理的 I/O 请求不得不在队列中等待较长时间。

--------------------------------------------------------正文开始--------------------------------------------------

如果没有看上面的,返回上面详细阅读一遍,再继续往下看。


--------------------------------------------------------这里才是正文开始--------------------------------------

我们要确认IO瓶颈,自然需要用到工具

在LINUX/UNIX中提供了两个判断磁盘IO非常有效的工具:iostat 以及sar,还可能用到iotop

AIX 环境下,iostat 和 sar 位于文件集 bos.acct 中,是基本系统 (Base Operating System) 的一部分,默认安装。

Linux 环境下,iostat 和 sar 包含在 sysstat 包中,默认安装。


先来看iostat

上述基本所有项,都可以在iostat -x 中看到。

这是我常用的:

 iostat -d -x -k 1 3

-x 必加项:man中解释显示出 extended report。不用管,就知道-x 会显示 await  svctm  %util等等,不加不显示就完了

-d,非必加项 :只显示 硬盘的相关内容(如果没有-d 会多出一项avg-cpu,也有一堆列)

-k,非必加项 :将关于吞吐的两个指标 用Kb单位显示,就是下面案例中的 第5、6项(rkB wkB)

1 3 ,每一秒 显示一次。总共显示3次。很好理解吧,不理解随便改改 就知道啥意思了

注意:第一次显示的结果是从系统启动到现在为止的平均数值,不具有参考价值。第二次显示的是从上一次显示结果,到这次之间时间的平均值,看这个

            说白了:比如 1 3  哗哗哗  结果弹出了三次。 第一次弹出的那个结果不看。从第二次开始看。上面一句说的很精准,但是很绕脑,看烦的直接理解这一句就好。

这是我一个虚拟机的结果。完全没有压力,不过用来解释每列意思也足够了

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda4              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda5              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

前两项------------总结:一般没什么用,我也不看

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读 取请求读取的是相同Block的数据,FS会将这个请求合并Merge);

wrqm/s:每秒这个设备相关的写入请求有多少被Merge了

------------------------

r/s,w/s两项--------------总结:每秒发生(读/写)请求的数量 ,两个数量加起来就是tps   或者说 IOPS  指标1

r/s The number of read requests that were issued to the device per second. 
w/s The number of write requests that were issued to the device per second.

-------------------------------------------------

rkB/s,wkB/s两项----------------总结:这里就是上面概念中 指标2 指的吞吐量。

rkB/s:每秒从这个硬盘或硬盘分区中读取了多少kB。

wkB/s:每秒向这个硬盘或硬盘分区中写了多少kB。

这里可以简单先用time dd  测试一下你硬盘普遍的吞吐量最高值,然后自己评估是不是到顶了

---------------------------------------------

avgrq-sz: 每次IO请求的数据大小,也就是上面的指标3。注意,这里单位是扇区,比如显示20. 指20个扇区。即20*512b= 10Kb。

man iostat中相关解释:The average size (in sectors) of the requests that were issued to the device.

-------------------------------------------------------------
avgqu-sz:每次IO请求时,平均的队深度度,指标6

针对每个机械物理盘,如果这个盘对应的IO队列深度超过3,则表示IO设备压力大了

man iostat中相关解释:The average queue length of the requests that were issued to the device.

---------------------------------------------------------------

await:I/O的平均等待时间(单位毫秒),包括:排队时间 和 服务时间(真正处理io的时间),指标7

man iostat中相关解释:The average time (in milliseconds) for I/O requests issued to the device to be  served.  

                                     This includes the time spent by the requests in queue and the time spent servicing them.

--------------------------------------------------------------

svctm:I/O的平均服务时间(单位毫秒),也就是被await包括的 存储真正处理IO的时间。指标5

             这个svctm可以适当背下,之前和人探讨IO问题的时候,就因为说不上来,而是说await后面那列 而被人鄙视。有时候细节决定成败啊
man iostat中相关解释:The average service time (in milliseconds) for I/O requests that were issued to the device.

-----------------------------------------------------------------

 %util:可以理解为设备带宽利用率,接近100%或者超了 肯定没好事就对了。指标4

man iostat中相关解释: Percentage  of  CPU  time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.

--------------------------------------------------------------------------------

好,上面解释完了。那么我们来说说如何判断:

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda4              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda5              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

我习惯性第一眼先看 %util,如果不高,其他值就不看了

如果%util存在问题,第二眼就去看svctm列,看这个值高不高。一般最多也就在15左右。

svctm和磁盘性能息息相关,除了硬件性能,如果IOPS(tps)增加也会增加该速度 

所以这里我们要将svctm和await一起看。如果 svctm 比较接近 await,说明 I/O 几乎没有在队列中等待的时间   

avgqu-sz 注意这个,如果平均超过2  ,说明IO系统有压力了



总结一下:

指标1 IOPS                 :r/s+w/s=IOPS(tps)

指标2 吞吐量               :rkB/s,wkB/s。 加在一起就是当前每秒吞吐量

指标3平均I/O数据大小:avgrq-sz

指标4 百分比               : util%

指标5 服务时间           :svctm

指标6 IO等待队列长度:avgqu-sz

指标7 等待时间           :await



……to be continued……

你可能感兴趣的:(Oracle优化之整体优化,Operation,System,IO,oracle)