• 1. 性能调优——IOSeling Chen更多性能测试资料尽在ROAD软件测试论坛 http://www.testroad.net/bbs/
  • 2. 内容介绍 旨在与大家交流性能测试,分享知识。 知识来源于网络,可以相互转载,请不要用于商业用途。
  • 3. Contents硬盘知识1IO监控2IO调整3如何减小IO4
  • 4. Content1.硬盘知识:介绍硬盘组成原理 2.IO监控:Windows,Linux磁盘监控工具及监控数据讲解 3.IO调整:如何提高IO,条带化原理,条带化结构 4.如何减少IO,系统如何调整
  • 5. 磁盘原理(HDD)盘片以每分钟数千转到上万转的速度在高速旋转,15K 10k 7.5k 5.2k RPM 磁头就能对盘片上的指定位置进行数据的读写操作 磁头磁化磁盘记录数据
  • 6. 磁盘原理从外到里存储 外快内慢 以扇区为单位存储 破碎文件读取多个扇区,时间长 柱面:所有盘面上的同一磁道构成一个圆柱, 一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才移到下一个扇区开始写数据
  • 7. HDD 示意图
  • 8. 磁盘接口 ATA(IDE 电子集成驱动器 16Bit总线)可达133M/s SATA(串行ATA 8位总线)可达300M/s,甚至600M/s 为什么并行的ATA没串行的SATA快? 时钟频率不一样,一个时钟内ATA比SATA传输的数据要多. 为什么ATA不反提高时钟频率? 排线多,信息干扰与同步问题
  • 9. 常见硬盘指标
  • 10. 磁盘读写随机访问(Random Access) 本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要作比较大的移动动作才能重新开始读/写数据 连续访问(Sequential Access) 当次IO给出的扇区地址与上次IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次IO操作 顺序IO模式(Queue Mode) 磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令 并发IO模式(Burst Mode) 当磁盘组能同时执行多个IO命令时,称为并发IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令
  • 11. 磁盘KPIIOPS(IO per Second) IO系统每秒所执行IO操作的次数IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)
  • 12. IOPS计算RPM(rpm=round per minute转/每分钟) 转速:7.2K RPM Avg寻道时间:5ms 平均旋转延时:(60s/7.2K)*1/2=4.17ms(最坏情况转一圈才开始读数据,乘1/2是把读写分开取二分之一) 单位IO:比如最大传输速度50M 8K的块,传输时间=8/50=0.156ms IOPS=1/(5ms+4.17ms+0.156ms)=107 次
  • 13. 传输速度/吞吐率Transfer Rate = IOPS * IO Chunk Size(块大小) IPOS=1000 Chunk Size=8K TR =1000*8K=8M/s
  • 14. IO延时瓶颈表象——IO延时 磁盘IO延时(IO Latency):也称为IO响应时间,是指内核对磁盘发出一个读或者写的IO命令,到内核接收到回应的时间,IO响应时间包括IO操作在磁盘处理的时间和IO操作在IO等待队列中所花费的等待时间。 单个IO时间:单个IO时间仅仅指的是IO操作在磁盘内部处理的时间,而IO响应时间还要包括IO操作在IO等待队列中所花费的等待时间。 Avg Queue Length (就是常说的Q)
  • 15. Contents硬盘1IO监控2IO调整3如何减小IO4
  • 16. Windows工具(perfmon)
  • 17. Windows IO性能单次IO大小 Avg. Disk Bytes/Read Avg. Disk Bytes/Write IO响应时间 Avg. Disk sec/Read Avg. Disk sec/Write IOPS Disk Reads/sec (<15ms) Disk Writes/sec (<15ms) Disk Transfers/sec IO吞吐率 Disk Bytes/sec Disk Read Bytes/sec Disk Write Bytes/sec Physical Disk -> Avg. Disk Queue Length (Q<2) Page faults/sec ->Pages Input/sec(Read from disk Pages) Page Reads/Sec (Read from disk times <5) 前一个是页数,后一个是次数 Pages Output/sec (Write to disk)
  • 18. BI BO磁盘: Bi(read) Bo(write)虚拟内存 Swap内存: Free Cache Si(=0正常)SO(=0正常)Bi(接近于0性能良好)Bo(接近于0性能良好)BiBo
  • 19. 磁盘性能分析Physical Disk -> % Disk Time Physical Disk -> Avg.Disk Queue Length <2*盘数 Memory -> Page Reads/sec缺页中断(内存中没有,需要从磁盘读取) 名词约定: Q:Physical Disk Avg.Disk Queue Length PR:Memory Page Reads/sec DT:Physical Disk Time L:Low H:High PRQDTResultLHH磁盘瓶颈HHH内在瓶颈
  • 20. Linux-iostatIostat 硬盘读写性能,#查看TPS和吞吐量信息 -d:显示某块具体硬盘,这里没有给出硬盘路径就是默认全部了 -k:以KB为单位显示 5:统计间隔为5秒 2:共统计2次的 tps:每秒IO次数 kB_read/s:每秒从设备(drive expressed)读取的数据量 kB_wrtn/s:每秒向设备(drive expressed)写入的数据量 kB_read:读取的总数据量 kB_wrtn:写入的总数据量 Note:读写单位Kilobytes
  • 21. Linux-iostatiostat -x 参数,查看设备使用率(%util)、响应时间(await) rrqm/s:每秒这个设备相关的读取请求有多少被合并(请求相同Block时,请求合并) wrqm/s:每秒这个设备相关的写入请求有多少被合并 r/s:每秒读取请求数(rio) w/s:每秒写入请求数(wio) resc/s:每秒读扇区数(rsect) wsec/s:每秒写扇区数(wsect) rkB/s:每秒读取的数据量,单位K字节 wkB/s:每秒写入的数据量,单位K字节 avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区),(rsect+wsect)*扇区大小/(rio+wio) avgqu-sz: 平均I/O队列长度 await:平均每次设备I/O操作的等待时间 (毫秒) svctm: 平均每次设备I/O操作的服务时间 (毫秒) svctm越接近于await则说明等待时间少 %util:Disk Time/总时间,表示了设备的繁忙程度。80%表示设备已经很忙了(如果多磁盘另算,个体不能代表全局)
  • 22. Linux-iostatiostat -c 参数,查看CPU状态信息 iostat –t 参数,磁盘状态统计信息 Blk_read/s:每秒读多少块 Blk_wrtn/s:开机到现在读了多少块 Blk_wrtn/s:每秒写了多少块 Blk_wrtn:开机到现在写了多少块 http://perumal.org/analyzing-database-server-io-bottlenecks-using-iostat/
  • 23. Linux-vmstatProcs  r:在运行队列中等待的进程数  b:在等待io的进程数  w:被交换出来的进程 Memory  swpd: 虚拟内存使用情况 KBfree: 空闲的内存 buff: 被用来做为缓存的内存数 单位:KB Swap  si: 从磁盘交换到内存的交换页数量 so: 从内存交换到磁盘的交换页数量 单位:KB/秒 IO  bi: 发送到块设备的块数 bo: 从块设备接收到的块数,单位:块/秒 System  in: 每秒的中断数 cs: 每秒(上下文)切换次数 CPU  us: CPU 使用时间 sy: CPU 系统使用时间 id: 闲置时间 r、b列一般为0,表示没有等待进程,如果不为0表示系统性能有问题 si、so 两 列,表示内存交换的频繁程度,如果数值长期很大,表示内存不够,要和硬盘交换数据 也有可能是每次读写的数据都不一样,这种机率较小 bi、bo 两列,表示I/O输入输出很频繁
  • 24. 监控工具Nmon Nagios Cacti KDE System Guard Gnome System Monitor
  • 25. Contents硬盘1IO监控2IO调整3如何减小IO4
  • 26. 磁盘速度改进目前改进磁盘存取速度的的方式主要有两种 一是磁盘快取控制(disk cache controller),它将从磁盘读取的数据存在快取内存(cache memory)中以减少磁盘存取的次数,数据的读写都在快取内存中进行,大幅增加存取的速度,如要读取的数据不在快取内存中,或要写数据到磁盘时,才做磁盘的存取动作。这种方式在单工环境(single-tasking envioronment)如DOS之下,对大量数据的存取有很好的性能(量小且频繁的存取则不然),但在多工(multi-tasking)环境之下(因为要不停的作数据交换(swapping)的动作)或数据库(database)的存取(因为每一记录都很小)就不能显示其性能。这种方式没有任何安全保障。 其二是使用磁盘阵列的技术。磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列所利用的不同的技术,称为RAID level,不同的level针对不同的系统及应用,以解决数据安全的问题。
  • 27. RAID0RAID0 RAID0将数据条带化(striping)将连续的数据分散在多个磁盘上进行存取,系统发出的IO命令(不管读IO和写IO都一样)就可以在磁盘上被并行的执行,每个磁盘单独执行自己的那一部分请求,这样的并行的IO操作能大大的增强整个存储系统的性能。假设一个RAID0阵列有 n(n>=2)个磁盘组成,每个磁盘的随机读写的IO能力都达到120的话,那么整个磁盘阵列的IO能力将是120*n。同时如果在阵列总线的传输能力允许的情况下,RAID0的吞吐率也将是单个磁盘的n倍。
  • 28. RAID0优: 快速 大容量 缺: 无备份安全性差
  • 29. RAID1RAID1 RAID1在容量上相当于是将两个磁盘合并成一个磁盘来使用了,互为镜像的两个磁盘里面保存的数据是完全一样的,因此在并行读取的时候速度将是n个磁盘速度的总和,但是写入就不一样了,每次写入都必须同时写入到两个磁盘中,因此写入速度只有n/2
  • 30. RAID1优: 备份安全性高(一个坏从另一个上恢复) 缺: 慢(写了两次)
  • 31. RAID3优: 快、安全,奇偶校验,一盘故障数据可重建 视频网站适用(文件读写多) 缺: 同时二盘故障,数据全丢失 小数据读写不适用,随机读慢奇偶校验盘
  • 32. RAID3+SpareSpace=(磁盘数-2)单盘容量 热备盘 备份故障盘上内容热备盘
  • 33. RAID5RAID5 RAID5是支持并行IO的,而磁盘上的数据呈条带状的分布在所有的磁盘上,因此读IO的速度相当于所有磁盘速度的总和。不过这是在没有磁盘损坏的情况下,当有一个磁盘故障的时候读取速度也是会下降的,因为中间需要花时间来计算丢失磁盘上面的数据。 写入速度只有所有磁盘速度总和的1/4。从这点可以看出RAID5是非常不适合用在要大批量写入数据的系统上的 要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用RAID5比较好
  • 34. RAID5RAID3 加强版,数所相互备份 Space=(磁盘数-1)*单盘容量 双磁盘同时故障数据全丢失
  • 35. RAID6RAID6 RAID6和RAID5很类似,差别就在于RAID6多了一个用于校验的磁盘。就写IO速度上来说这两个是完全一样的,都是所有磁盘IO速度的总和。 在写IO上也很是类似,不同的是RAID将一个命令分成了三次读、三次写一共6次IO命令才能完成,也就是RAID6实际写入磁盘的速度是全部磁盘速度之和的1/6。可以看出从写IO看RAID6比RAID5差别是很大的
  • 36. RAID6二个磁盘故障仍可以保证安全 适合安全性较高应用 Space=(磁盘数-2)*单盘容量
  • 37. RAID10RAID10 RAID0读写速度都很好,却没有冗余保护;RAID5和RAID6都有同样的毛病就是写入的时候慢,读取的时候快。那么RAID1呢?嗯,这里要说的就是RAID1,其实不管是RAID10还是RAID01,其实都是组合大于2块磁盘时候的RAID1,当先镜像后条带时候就称为RAID10,先条带后镜像的时候称为RAID01。从性能上看RAID01和RAID10都是一样的,都是RAID1嘛,但是RAID10在重建故障磁盘的时候性能比 RAID01要快 安全性要求很高,不计成本,小数据量频繁写入的系统采用RAID10的方式比较好
  • 38. RAID10RAID0与RAID1综合,安全性高 Space=(磁盘数*单盘容量)/2 From :www.lacie.com
  • 39. Contents硬盘1IO监控2IO调整3如何减小IO4
  • 40. 系统特征门户网站企业生产应用科学计算流媒体应用文件服务政企办公静动动&静1.进程多 2.消耗内存多 3.磁盘IO频繁1.网络带宽瓶颈 2.缓存多1.DB压力大 2.存储压力大 3.内存压力大 4.CPU压力大B/S
  • 41. 存储体系硬 盘 Bi(read) Bo(write)虚 拟 内存 Swap内 存 Free Cache Si(=0正常)SO(=0正常)Bi(接近于0性能良好)Bo(接近于0性能良好)BiBo
  • 42. 存储结构的演化硬 盘FSDBMSDBMScache FS硬件的升级成本高,随着业务量、请求数的增加,终究还会产生瓶颈 治标不治本
  • 43. DB优化思路APP层:APP SQL请求DB Coding层: 解析并优化SQL、管理锁、 并发等Mem层:高速缓存、共享内 存池、PGA(排序 散列)、 SGA(缓存)磁盘:物理读写 表、索引、读写临时工作区 、重做日志等这一层的优化代价最高、 而且随着业务量的增加 变得失效治标不治本ASM 自动存储管理 也不是万能,有时需 要人工设置代码优化成本最低 解决本质问题减少请求能够 显著提高性能调优思路
  • 44. DB优化思路APP层:APP SQL请求DB Coding层: 解析并优化SQL、管理锁、 并发等Mem层:高速缓存、共享内 存池、PGA(排序 散列)、 SGA(缓存)磁盘:物理读写 表、索引、读写临时工作区 、重做日志等调优思路减少SQL请求、提高运算效率 优化APP代码 优化物理结构(分区、索引、冗余) SQL请求尽可能少、返回最小化 查询器优化 避免过载 单条SQL优化 并行SQL提高并发执行能力 减少资源争用(锁、闩锁、缓存)缓存,缓冲IO请求降低IO 优化内存、减少物理IO访问 SGA(缓存高频访问数据) PGA(排序、散列) AMM(自动内存管理) 人工干预提高IO带宽 条带化 SDD等新的专用文件存储产品
  • 45. Web|APP优化页面简化 表单压缩 局部刷新 仅取所需 减少不必要请求 逻辑清淅 谨慎继承 程序算法优化(二分查找 哈希表) 批处理 延迟加载 防止内存泄露 减少大对象引用 防止争用死锁 。。。。。
  • 46. Thank You !The End更多性能测试资料尽在ROAD软件测试论坛 http://www.testroad.net/bbs/