ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

oracle SQL 优化之量化IO速度 笔记

2022-01-04 18:00:10  阅读:182  来源: 互联网

标签:读取 随机 IO SQL oracle 磁盘 id block


SQL优化观看方法见最后:

1、推导IO响应时间(随机读)

服务器的硬盘一般都是15000转/分钟,它的io响应时间量化如下:

   15000转/60秒
  =60秒/15000转 (分子分母换下位置)
  =1秒/2500转
  =0.0004秒/转

可以得出结论IO响应时间是4毫秒,换句话说你的磁盘转一圈花费4毫秒肯定能找到你需要的数据(随机读)。

2、推导硬盘的iops
    每秒支持的io个数的上限:
    1秒=1000毫秒,io随机读的响应是4ms,意思就是花费4ms一个io,那一秒钟最多可以有1000/4=250个IO.那这个15000转的硬盘的IOPS就是250

3、磁盘最大的吞吐量
   磁盘的吞吐量是由磁盘接口决定的,比如SATA,SAS接口
   
   思考问题1:为啥操作系统iostat 命令显示,磁盘只有2mb/s,磁盘就100%busy了,是否意味着磁盘有性能问题呢?
   .................
   .................
   .................
   
   ####IO 是如何被读取的!
   对于磁盘而言,你需要告诉磁盘你从哪个块开始读(start_offset),读几个块:
   pread(文件号,start_offset,size)
    
    1>对于数据库而已,每个block是8192,有个数据文件文件号是1,你需要从block id=2(编号0,1,2)开始读,读1个block(单块读)。它对应的命令就是:
    pread(1,2*8192,8192).
      数据库的读写在操作系统层大部分都是随机读和随机写
    
    2>对于操作系统而已,IO寻址方式有:
      随机读   ---数据位置相差大,比如第一个是block id 1,第二个是block id是2000
      随机写
      顺序读   ---数据位置相邻,比如block id 1和block id 2的读取
      顺序写
    
    ------回归刚才那个问题
    
    思考问题1:为啥操作系统iostat 命令显示,磁盘只有2mb/s,磁盘就100%busy了,是否意味着磁盘有性能问题呢?
    =1》如果单块读:一次读取一个block,,一个block  8k,它一秒钟读取了250次,那它这一秒读取的大小是250*8K=2000K=2M,这是由于达到iops上限,所以iostat看到磁盘是100% busy了,是否意味着磁盘有性能问题呢?
    =2》如果多块读,一次读取128个block=1M,它一秒钟读取了250次,那这一秒的速度是250M/s
      
      所以IO读速度取决于每次IO读取的block数
    
    
    思考问题2:一条update语句执行过程中涉及的IO类型
    1>客户端发出update语句 set id=5 where id=3
    2>前台进程判断id=3的数据在不在内存中,不在就将硬盘中的数据随机读取到内存-buffer cache中
    3>在共享内存中把id=3修改成5, 改之前把前镜像写入undo,commit后把log buffer (记录undo和data file的修改日志) 通过LGWR进程以顺序的方式写入到redo log
    4> DBWR 进程 异步把脏数据随机写入磁盘
    

------------------SQL观看方法--------:

 

 

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

本人淘宝店铺,欢迎咨询:

oracle 经营范围:

1、单机安装2、rac安装3、dataguard 配置
4、备份恢复5、漏洞修复6、GoldenGate安装
7、数据迁移8、版本升级9、问题咨询

https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111debPYFG5q&ft=t&id=608457389678

    

   

标签:读取,随机,IO,SQL,oracle,磁盘,id,block
来源: https://blog.csdn.net/ty_tarena_pger/article/details/122305308

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有