楼主: foxmile

[原创] 关于oracle数据块和操作系统块的关系。

[复制链接]
论坛徽章:
116
ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-25 15:04:022010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:19
41#
发表于 2008-11-11 21:59 | 只看该作者
原帖由 sqysl 于 2008-11-10 08:58 发表


应该不能说是绕过吧,我觉得应该是ORACLE在OS首肯的前提下,去做一些本来应该OS来做的工作,相当于OS的劳工吧。我当时只是看什么资料时看了一下,应该有7、8年之久了,之所以现在还记得,就是因为我当时也很疑惑,印象很深,应该还是本英文资料。


是不是bypass filesystem cache,  direct IO 。

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
42#
发表于 2008-11-12 01:58 | 只看该作者
我的印象里不是,记得好像是ORACLE去执行I/O,而不是申请OS去执行,由于好几年了,我最近翻了所有资料也没查到,希望有看到过类似资料的朋友能说一下。

使用道具 举报

回复
论坛徽章:
59
狮子座
日期:2016-03-26 13:35:402013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-02-25 11:06:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20灰彻蛋
日期:2012-04-25 13:19:33紫蛋头
日期:2012-03-14 11:16:09最佳人气徽章
日期:2012-03-13 17:39:18玉石琵琶
日期:2012-02-21 15:04:38鲜花蛋
日期:2011-11-30 14:13:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
43#
发表于 2008-11-12 09:35 | 只看该作者
我的理解,这种情况下应该是oracle直接与kernel交互而不通过os,应该是oracle有一部分功能或者代码与kernel整合在了一起
kernel里面肯定有些指令或者驱动来操作设备,而oracle只要能够直接调用这些东西就行了

使用道具 举报

回复
论坛徽章:
59
狮子座
日期:2016-03-26 13:35:402013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-02-25 11:06:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20灰彻蛋
日期:2012-04-25 13:19:33紫蛋头
日期:2012-03-14 11:16:09最佳人气徽章
日期:2012-03-13 17:39:18玉石琵琶
日期:2012-02-21 15:04:38鲜花蛋
日期:2011-11-30 14:13:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
44#
发表于 2008-11-12 10:09 | 只看该作者
原帖由 bluemoon0083 于 2008-11-12 09:35 发表
我的理解,这种情况下应该是oracle直接与kernel交互而不通过os,应该是oracle有一部分功能或者代码与kernel整合在了一起
kernel里面肯定有些指令或者驱动来操作设备,而oracle只要能够直接调用这些东西就行了

我觉得这个说法应该没有问题,oracle的数据文件有其特有的格式
文件系统是与os相关的,os知道如何来读取文件系统中的文件,如果数据文件放在文件系统那么oracle还要通过os的功能来使用文件系统中的文件
至于裸设备,虽然os不知道如何来读取,但由于oracle自己已经知道其特有的格式,那么直接通过kernel来操作就行了

使用道具 举报

回复
论坛徽章:
59
狮子座
日期:2016-03-26 13:35:402013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-02-25 11:06:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20灰彻蛋
日期:2012-04-25 13:19:33紫蛋头
日期:2012-03-14 11:16:09最佳人气徽章
日期:2012-03-13 17:39:18玉石琵琶
日期:2012-02-21 15:04:38鲜花蛋
日期:2011-11-30 14:13:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
45#
发表于 2008-11-12 10:16 | 只看该作者
而oracle的机制决定了即使raw的数据文件os不认识oracle也能保证一致性和完整性,因此通常raw的性能比fs要高,绕过了os维护其fs的一致性等功能
当然os的fs是对所有文件,而不仅仅是oracle的文件

以上如有说错的地方请批评指正!

[ 本帖最后由 bluemoon0083 于 2008-11-12 10:28 编辑 ]

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
46#
发表于 2008-11-12 13:59 | 只看该作者
我比较认可楼上的意思,我也是这里理解的,ORACLE进行I/O时,和OS的信息交互是不可避免的,但具体去执行由ORACLE去做I/O,这样也许比OS去执行ORACLE要求的I/O效率要高一些,包括对其他一些资源的管理也是,比如:内存,ORACLE不可能事无巨细的都把任务抛给OS去做,它只是在必要的时候和OS进行信息交互,然后自己去做具体的实施,这点来说,ORACLE某些功能模块具备OS模块的特征,两者在某些方面紧密的结合在了一起,这点来说,它们的关系比普通应用软件和OS的关系要“亲密”得多,这也是oracle等数据库软件操作动辄上千G数据,性能却如此之高的原因所在,如果数据库每做一个I/O都抛给OS去操作,然后由OS再把结果转给ORACLE的话,我想,数据库得性能是受到影响的,很多其他数据库系统也更加明确的说明了这点。

使用道具 举报

回复
招聘 : HTML页面制作
论坛徽章:
74
喜羊羊
日期:2015-04-29 17:32:03夏利
日期:2013-11-30 17:08:44雪佛兰
日期:2013-09-02 10:24:402013年新春福章
日期:2013-02-25 14:51:24蜘蛛蛋
日期:2012-11-26 22:08:56ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32双黄蛋
日期:2012-05-17 22:25:44版主3段
日期:2012-05-15 15:24:11茶鸡蛋
日期:2012-04-06 17:43:25茶鸡蛋
日期:2012-03-26 21:29:09
47#
发表于 2008-11-12 15:27 | 只看该作者
windows下oracle I/O原理不是很明白。

Unix下的这个kernel分解图可以看得比较明白




对于raw device来说,oracle直接走Device Control那条线调用device driver读写DISK字符设备,所以说创建表空间的时候ORACLE的裸设备必须要选/dev/下的那个disk字符设备而不是块设备.

对于普通的文件系统,oracle走Filesystem那条线,调用OS的文件系统读写块设备.

使用道具 举报

回复
招聘 : HTML页面制作
论坛徽章:
74
喜羊羊
日期:2015-04-29 17:32:03夏利
日期:2013-11-30 17:08:44雪佛兰
日期:2013-09-02 10:24:402013年新春福章
日期:2013-02-25 14:51:24蜘蛛蛋
日期:2012-11-26 22:08:56ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32双黄蛋
日期:2012-05-17 22:25:44版主3段
日期:2012-05-15 15:24:11茶鸡蛋
日期:2012-04-06 17:43:25茶鸡蛋
日期:2012-03-26 21:29:09
48#
发表于 2008-11-12 15:52 | 只看该作者
如果ORACLE使用的是文件系统,应该通过调用OS 的文件系统来读取I/O

每个操作系统filesystem的具体实现方式都应该还有些区别
下面的图是AIX 的I/O栈图




对于direct I/O 来讲,操作会跳过VMM那个阶段,也就是不经过虚拟内存管理,从用户缓冲区直接与磁盘进行数据传输。

使用道具 举报

回复
招聘 : HTML页面制作
论坛徽章:
74
喜羊羊
日期:2015-04-29 17:32:03夏利
日期:2013-11-30 17:08:44雪佛兰
日期:2013-09-02 10:24:402013年新春福章
日期:2013-02-25 14:51:24蜘蛛蛋
日期:2012-11-26 22:08:56ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32双黄蛋
日期:2012-05-17 22:25:44版主3段
日期:2012-05-15 15:24:11茶鸡蛋
日期:2012-04-06 17:43:25茶鸡蛋
日期:2012-03-26 21:29:09
49#
发表于 2008-11-12 16:53 | 只看该作者
对照文件系统的I/O栈图,还是没能理解YongHuang所说的IO  chunksize 跟ORACLE BLOCK的关系

参照上面的两个图,YongHuang所说的“OS space allocation block size ”
是指Block device的block的大小吗?




第二个图(AIX IO栈)的 Block I/O to logical disk的一次I/O是不是就是指block device的block size?

在make filesystem的时候要指定BLOCK的大小,这个block的大小是不是指“I/O Chunk size”? 也就是第二个图中的I/O to blocks in a filesystemde的block的大小。 对文件logical读写的操作,一次I/O是不是就是指I/O chunk size?

[ 本帖最后由 feng_xin 于 2008-11-13 09:30 编辑 ]

使用道具 举报

回复
招聘 : HTML页面制作
论坛徽章:
74
喜羊羊
日期:2015-04-29 17:32:03夏利
日期:2013-11-30 17:08:44雪佛兰
日期:2013-09-02 10:24:402013年新春福章
日期:2013-02-25 14:51:24蜘蛛蛋
日期:2012-11-26 22:08:56ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32双黄蛋
日期:2012-05-17 22:25:44版主3段
日期:2012-05-15 15:24:11茶鸡蛋
日期:2012-04-06 17:43:25茶鸡蛋
日期:2012-03-26 21:29:09
50#
发表于 2008-11-12 16:57 | 只看该作者
对于raw device来说, I/O 栈应该只包括最下面的三层

那么block I/O to logical disk的大小是不是应该跟oracle的block size有很大的关系?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表