当前位置: 首页 > news >正文

逻辑io 物理io oracle,物理IO与逻辑IO

物理IO与逻辑IO

2012-12-28 16:38:07|  分类:webgame|字号

IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO。而IO性能的发展,明显落后于CPU的发展。Memchached也好,NoSql也好,这些流行技术的背后都在直接或者间接地回避IO瓶颈,从而提高系统性能。

IO系统的分层:

d5d6f074f0a9929451b82de9c4adb7a8.png

三层结构

上图层次比较多,但总的就是三部分。磁盘(存储)、VM(卷管理)和文件系统。专有名词不好理解,打个比方说:磁盘就相当于一块待用的空地;LVM相当于空地上的围墙(把空地划分成多个部分);文件系统则相当于每块空地上建的楼房(决定了有多少房间、房屋编号如何,能容纳多少人住);而房子里面住的人,则相当于系统里面存的数据。

文件系统—数据如何存放?

对应了上图的File System和Buffer Cache。

File System(文件系统):解决了空间管理的问题,即:数据如何存放、读取。

Buffer Cache:解决数据缓冲的问题。对读,进行cache,即:缓存经常要用到的数据;对写,进行buffer,缓冲一定数据以后,一次性进行写入。

VM—磁盘空间不足了怎么办?

对应上图的Vol Mgmt。

VM其实跟IO没有必然联系。他是处于文件系统和磁盘(存储)中间的一层。VM屏蔽了底层磁盘对上层文件系统的影响。当没有VM的时候,文件系统直接使用存储上的地址空间,因此文件系统直接受限于物理硬盘,这时如果发生磁盘空间不足的情况,对应用而言将是一场噩梦,不得不新增硬盘,然后重新进行数据复制。而VM则可以实现动态扩展,而对文件系统没有影响。另外,VM也可以把多个磁盘合并成一个磁盘,对文件系统呈现统一的地址空间,这个特性的杀伤力不言而喻。

存储—数据放在哪儿?如何访问?如何提高IO速度?

对应上图的Device Driver、IO Channel和Disk Device

数据最终会放在这里,因此,效率、数据安全、容灾是这里需要考虑的问题。而提高存储的性能,则可以直接提高物理IO的性能

2. Logical IO vs Physical IO

逻辑IO是操作系统发起的IO,这个数据可能会放在磁盘上,也可能会放在内存(文件系统的Cache)里。

物理IO是设备驱动发起的IO,这个数据最终会落在磁盘上。

逻辑IO和物理IO不是一一对应的。

这部分的东西在网络编程经常能看到,不过在所有IO处理中都是类似的。

IO请求的两个阶段:

等待资源阶段:IO请求一般需要请求特殊的资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。

使用资源阶段:真正进行数据接收和发生。

举例说就是排队和服务。

在等待数据阶段,IO分为阻塞IO和非阻塞IO。

阻塞IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。

非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用

在使用资源阶段,IO分为同步IO和异步IO。

同步IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。

异步IO:应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用。

ee845eafc36ae5bb95e25ab640c9b4fe.png

按照Unix的5个IO模型划分

阻塞IO

非阻塞IO

IO复用

信号驱动的IO

异步IO

从性能上看,异步IO的性能无疑是最好的。

各种IO的特点

阻塞IO:使用简单,但随之而来的问题就是会形成阻塞,需要独立线程配合,而这些线程在大多数时候都是没有进行运算的。Java的BIO使用这种方式,问题带来的问题很明显,一个Socket需要一个独立的线程,因此,会造成线程膨胀。

非阻塞IO:采用轮询方式,不会形成线程的阻塞。Java的NIO使用这种方式,对比BIO的优势很明显,可以使用一个线程进行所有Socket的监听(select)。大大减少了线程数。

同步IO:同步IO保证一个IO操作结束之后才会返回,因此同步IO效率会低一些,但是对应用来说,编程方式会简单。Java的BIO和NIO都是使用这种方式进行数据处理。

异步IO:由于异步IO请求只是写入了缓存,从缓存到硬盘是否成功不可知,因此异步IO相当于把一个IO拆成了两部分,一是发起请求,二是获取处理结果。因此,对应用来说增加了复杂性。但是异步IO的性能是所有很好的,而且异步的思想贯穿了IT系统放放面面。

转自:http://pengjiaheng.iteye.com/blog/847588

=============================================================================================================================

2009-12-08 12:53 by 土星的狗狗, 216 阅读, 0 评论, 收藏, 编辑

LOGICAL AND PHYSICAL I/O

LOGICAL I/O 是ORACLE 内核从DATABASE BUFFER CACHE 取得数据。如果内核不能从CACHE中得到数据它将请求操作系统取得数据。

PHYSICAL I/O 是ORACLE 内核从操作系统取得数据,因为不能从DATABASE BUFFER CACHE中取得数据了。

请注意物理I/O不一定就是磁盘读取,因为操作系统内部也有BUFFER CACHE,但是从OARCLE观点来看,这些读取都是物理I/O

其实实际上我们应该减少的是逻辑I/O而不是物理I/O

1. 逻辑I/O需要LATCHES 或者序列化设备,这些东西严重的影响了系统的扩展性

2. 如果减少了逻辑I/O,物理I/O就会自然的执行因为逻辑I/O如果不能成功的话,那么物理I/O就会起作用

3. 物理I/O并不像想象的那么花费时间,因为大多数的情况下,操作系统的CACHE都能够满足要求。

逻辑I/O有下面两个部分组成 1. CONSISTENT GETS 2. DB BLOCK 或者CURRENT GETS

相关文章:

  • oracle是哪种体系结构,Oracle体系结构是什么?
  • oracle dataguard文档,完整版Oracle_DataGuard文档
  • linux命令dm,Linux systool 命令用法详解-Linux命令大全(手册)
  • linux多核操作命令,Linux多核并行编程关键技术
  • linux退出登录脚本,Linux实现自动登录的实例讲解
  • linux升级openssh提示密码错误,关于linux升级openssh须知
  • linux 无法清空大文件内容,在Linux中5种清空或清空大型文件内容的方法
  • linux 入口流控 虚拟设备,Linux下使用虚拟网卡的ingress流控(入口流控)
  • ucos运行linux文件,关于移植ucosii到windows和linux平台下的思路
  • linux strace 跟踪线程,获取线程id--strace跟踪线程系统调用
  • linux 非root进程,Linux查看非root运行的进程
  • linux下多路径dm不一致,DM多路径存储
  • linux虚拟主机管理平台,8 款顶级的虚拟主机管理系统
  • linux安装无线电软件,Uhd+GNUradio软件无线电平台在Linux系统上安装过程
  • linux主机健康检查,Zabbix监控Tengine 后端服务器健康检查
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • exif信息对照
  • JS字符串转数字方法总结
  • MD5加密原理解析及OC版原理实现
  • PhantomJS 安装
  • Spring Cloud中负载均衡器概览
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Vue组件定义
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 关于字符编码你应该知道的事情
  • 如何使用 JavaScript 解析 URL
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一个完整Java Web项目背后的密码
  • 鱼骨图 - 如何绘制?
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​Spring Boot 分片上传文件
  • #define
  • %@ page import=%的用法
  • (1)(1.11) SiK Radio v2(一)
  • (LeetCode 49)Anagrams
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (一)80c52学习之旅-起始篇
  • .net 托管代码与非托管代码
  • .Net6使用WebSocket与前端进行通信
  • .Net小白的大学四年,内含面经
  • @SpringBootApplication 包含的三个注解及其含义
  • [《百万宝贝》观后]To be or not to be?
  • [2018-01-08] Python强化周的第一天
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [C++]STL之map
  • [CDOJ 1343] 卿学姐失恋了
  • [ComfyUI进阶教程] animatediff视频提示词书写要点
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [C语言]——柔性数组
  • [c语言]小课堂 day2