资源供给:IO子系统之五

    
      认识硬盘的特性,是数据库系统优化的基础所在,也是系统设计优化的基础所在。
    
      硬盘的基本属性:    
     磁头
     盘片
     磁道
     扇区
     柱面
       
     容量
     尺寸
     转速
     外磁道
     内磁道
     缓存       
     接口

     平均寻道时间
     平均延迟时间
     数据读取时间
     内部传输速度
     外部传输速度
     数据传输时间

  几个基本点:
    数据的密度决定读取的速度
    外磁道的读取速度要远远大于内磁道
   单碟容量越大,速度越快
   相同的单碟容量,尺寸越小速度越快
    转速越快,旋转延迟越短
   平均寻道时间和旋转延迟为读取数据的最主要时间消耗
    在现在普遍FC和SAS的年代,数据读取速度取决于数据内部传输速度。
   
  
  几个基本数据:
   15000rpm的磁盘:
      平均旋转延迟:=60*1000/15000/2 = 2ms
       平均寻道时间:=     3~10ms
       内部数据传输速度:=100m/s
       外部传输速度:FC:=200|400m/s  SAS: 300m|600m/s
                               SATAII: 150m  SATAIII: 300m
   
  外磁道和内磁道
       我们简单的以面积置换的方式来确定外磁道区域和内磁道区域的数据存储量:
     
       外区/内区:=3:1,也就是以中间划分的数据存储,外磁道占总数据的75%,内磁道占总数据的25%,显然数据读取速度外磁道为内磁道3倍。
     
       显然外磁道的平均寻道时间也比作用于全盘的大大加快:在径向运动速度一样的前提下,其平均移动距离降低了50%,也就是说降低了一半的平均寻道时间。
     
磁道使用建议:
     无论如何,在任何系统中,包含OLTP和DW系统中,仅仅使用外磁道是一个最为简单的增加性能,同时不增加成本的手段。内磁道的磁盘可以用来存放数据库外的速度或者一些存档数据。


磁盘对于oltp系统的影响:
     oltp系统的典型特点为数据随机访问,也就是其磁头位置是随机的,需要经过寻道时间,我们假设读取8k的数据来计算时间。
     读取8k的数据:
     平均寻道时间:6ms
     平均延迟时间:2ms
      8k数据读取:=1000*8/1024/100=0.078ms
   
     可以看到可以忽略数据读取时间,仅仅取平均寻道和平均延迟即可,也就是说读取8k的一个IO:=6ms + 2ms = 8ms

     同样的读取,我们来看仅仅作用于外磁道:
     读取8k的数据:
     平均寻道时间:3ms
     平均延迟时间:2ms
     8k数据读取时间:= 1000*8/1024/(100*1.5) = 0.052ms
     这样我们取:5ms
    
     相对于我们仅仅作用于外磁道的oltp效率提高:(8-5)/8:= 37.5%,也就是说我们不要增加一分钱的投资可以使oltp系统的磁盘性能提高37.5%。仅仅放置oltp数据在外磁道是我们极力推荐的方式。


    我们进一步来看顺序读:
    读取1m的数据:

    平均寻道时间:0ms
    平均延迟时间:0ms
    1m的数据读取时间:= 1000*1/100 = 10ms
    
    也就是说读取1M的数据在理想状态下是10ms,大家在这里可以发现读取1M的数据和读取8k的数据两者的时间差异非常小。

    如果作用于外磁道:
   1m的数据读取时间:= 1000*1/(100*1.5) = 6.67ms

   外磁道处理的性能增强:(10-6.67)/10 = 33.3%,也就是可以不花一分钱得到DW系统的磁盘33.3%的性能增强。

   当然这个批处理计算极为理想的,单线程工作,磁盘被独占。在实际的系统中可能会存在并发而导致存在平均延迟时间。

    从上面的描述中可以看出,对于顺序IO的业务保持其磁盘系统独占式运行不受干扰是多少的重要。

    具体到Oracle来说,特别是Online Redo Log,必须设置独立的磁盘给Online RedoLog,可惜我们在实践过程中很少遵循这个原则。
    我们来看看,在独占式的Online redo log中,即使没有磁盘缓存的支持,也可以获得很好的Io响应:

    假设写2k的数据,2k是大多数业务系统的事务范畴。

    平均寻道时间:=0ms
    平均延迟时间:=0ms
    数据读取时间:=1000*2/1024/100 = 0.019ms
   如果仅仅作用于外磁道,效率可以进一步的提高。
   可以看到,即使是仅仅一张磁盘的Online Redo Log,也可以提供每秒:50000多的事务吞吐量。

    一旦发生混合访问,redo log写的性能将快速下跌:
    平均寻道时间:=6ms
    平均旋转延迟:=2ms
    数据读取时间:=0.019ms
    合计:=8.019ms
   一旦合计之后,每秒的事务吞吐量将很可怜,只能提供每秒:120个事务的吞吐量。  

  当然在实际业务过程不会存在如此大的差异,主要原因在于磁盘本身存在着buffer,磁盘阵列更是有大型的cache做支撑。 


   同样的情况也可以解释为什么并行的IO处理往往是串行处理的效率更高,串行的独占式处理避免了平均寻道时间和平均旋转延迟。
   



 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/92650/viewspace-777037/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/92650/viewspace-777037/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值