楼主: foxmile

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

[复制链接]
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
21#
 楼主| 发表于 2008-11-7 10:48 | 只看该作者
原帖由 Yong Huang 于 2008-11-7 02:59 发表


Perfect. I hope foxmile is happy with this answer.

Yong Huang


豁然开朗。。。。。。受益匪浅。多谢两位。

使用道具 举报

回复
论坛徽章:
38
2010新春纪念徽章
日期:2010-01-04 08:33:082012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主2段
日期:2012-05-15 15:24:11优秀写手
日期:2013-12-18 09:29:08马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
22#
发表于 2008-11-7 14:35 | 只看该作者
盘阵或者是存储硬件的问题,这些是硬损坏。在操作系统层,块也会有软损坏,对操作系统了解不多,操作系统的块,应该有一定格式的,如果格式信息由于罕见的原因损坏了,比如病毒程序的破坏,硬件层即使没有问题,也会造成块的损坏,这种软件错误是很少见的。因为只有格式信息被破坏后,操作系统才会认为坏损坏了,如果是块中数据被破坏,只要格式信息正确,操作系统层不会报告块错误。
数据库对数据正确性的要求更严格,因此Oracle对每个块,在块头存有一个校验和,如果发生了软、硬性质的错误,没有损坏到操作系统块的格式信息,因此,操作系统没有报错,但Oracle在读块时通过计算、对比校验和,可以知道块错误了。有一个参数可以关闭校验和,这可以略微的提高性能,但Oracle也不再有检测块数据是否正确的能力。也就是只要块格式信息正常,那怕数据全被0覆盖,Oracle也不会报错了。

一个区访问了多个扇区,一个区一定会访问多个扇区的。一个扇区一般只有512字节,一个区至少一个Oracle块吧,也会有多个区的。
你是不是想说如果一个区占据了一个扇区的前半部分,另一个区占据了一个扇区的后半部?  Oracle不会让这种情况出现。

使用道具 举报

回复
论坛徽章:
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
23#
发表于 2008-11-7 15:22 | 只看该作者
讨论的不错,学习了。
不过,ORACLEI/O数据块时,似乎并不是每次都申请OS,然后OS完成I/O,而是很多时候,ORACLE自己直接完成数据的I/O,这点其他数据库系统(如:MSSQL)也是一样的,也就是引擎内部就有完成该功能的模块,很久不研究这些东西了,只是记得有这么回事情,大家一起讨论。

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
24#
发表于 2008-11-8 03:04 | 只看该作者
原帖由 sqysl 于 2008-11-7 01:22 发表
讨论的不错,学习了。
不过,ORACLEI/O数据块时,似乎并不是每次都申请OS,然后OS完成I/O,而是很多时候,ORACLE自己直接完成数据的I/O,这点其他数据库系统(如:MSSQL)也是一样的,也就是引擎内部就有完成该功能的模块,很久不研究这些东西了,只是记得有这么回事情,大家一起讨论。


It's better to say Oracle's I/O request may bypass *filesystem* calls. You can't bypass *OS*. You can have Oracle files on raw disks, but you still need OS.

And there's a "hybrid" approach. Oracle on Windows relies on NTFS filesystem to do most of the file management work, but datafile I/O does not go through NTFS regular I/O path. That's why talking about filesystem block size, or more correctly I/O chunk size, has no practical meaning. This is of course only true if you install Oracle on NTFS instead of raw. Very few people use raw disks on Windows; there's no need.

Yong Huang

使用道具 举报

回复
论坛徽章:
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
25#
发表于 2008-11-8 08:39 | 只看该作者
谢谢YONGHUANG版主的答复,我说的意思不是绕过文件系统,我的意思是:ORACLE的I/O并不是次都先申请OS,然后由OS来完成,很多时候,ORACLE的I/O是自己完成的,不是由OS来完成后返回给ORACLE系统,我记得以前看过这方面的资料,主要目的就是为了提高ORACLE的I/O的效率,如果每个I/O都申请OS,再由OS去执行,然后把I/O数据返回给ORACLE是件很麻烦的事情,所以,记得ORACLE在某个版本上做了以上改进,我虽记得有这么回事情,但不是很确定,有时间我找找那个资料。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
26#
 楼主| 发表于 2008-11-8 21:17 | 只看该作者
原帖由 晶晶小妹 于 2008-11-7 14:35 发表
盘阵或者是存储硬件的问题,这些是硬损坏。在操作系统层,块也会有软损坏,对操作系统了解不多,操作系统的块,应该有一定格式的,如果格式信息由于罕见的原因损坏了,比如病毒程序的破坏,硬件层即使没有问题,也会造成块的损坏,这种软件错误是很少见的。因为只有格式信息被破坏后,操作系统才会认为坏损坏了,如果是块中数据被破坏,只要格式信息正确,操作系统层不会报告块错误。
数据库对数据正确性的要求更严格,因此Oracle对每个块,在块头存有一个校验和,如果发生了软、硬性质的错误,没有损坏到操作系统块的格式信息,因此,操作系统没有报错,但Oracle在读块时通过计算、对比校验和,可以知道块错误了。有一个参数可以关闭校验和,这可以略微的提高性能,但Oracle也不再有检测块数据是否正确的能力。也就是只要块格式信息正常,那怕数据全被0覆盖,Oracle也不会报错了。


一个区访问了多个扇区,一个区一定会访问多个扇区的。一个扇区一般只有512字节,一个区至少一个Oracle块吧,也会有多个区的。
你是不是想说如果一个区占据了一个扇区的前半部分,另一个区占据了一个扇区的后半部?  Oracle不会让这种情况出现。


关于校验和,校验和写在磁盘的什么地方呢?查了以下,校验和是在写的时候,计算,同时读的时候计算,然后对比,那它到底存储在什么地方?oracle用什么去找之前存储的校验和呢?

[ 本帖最后由 foxmile 于 2008-11-8 21:43 编辑 ]

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
27#
 楼主| 发表于 2008-11-8 21:27 | 只看该作者
原帖由 sqysl 于 2008-11-8 08:39 发表
谢谢YONGHUANG版主的答复,我说的意思不是绕过文件系统,我的意思是:ORACLE的I/O并不是次都先申请OS,然后由OS来完成,很多时候,ORACLE的I/O是自己完成的,不是由OS来完成后返回给ORACLE系统,我记得以前看过这方面的资料,主要目的就是为了提高ORACLE的I/O的效率,如果每个I/O都申请OS,再由OS去执行,然后把I/O数据返回给ORACLE是件很麻烦的事情,所以,记得ORACLE在某个版本上做了以上改进,我虽记得有这么回事情,但不是很确定,有时间我找找那个资料。

你的意思是并不是每次都提交操作系统去读操作系统的块,那oracle怎么判断,什么时候去读取,而什么时候不读取呢?
我理解,肯定是会发生的,只是Oracle怎么提高这个效率呢?可是Oracle是不能直接去管理操作系统的块的啊。

[ 本帖最后由 foxmile 于 2008-11-8 21:42 编辑 ]

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
28#
 楼主| 发表于 2008-11-8 21:38 | 只看该作者
原帖由 Yong Huang 于 2008-11-8 03:04 发表


It's better to say Oracle's I/O request may bypass *filesystem* calls. You can't bypass *OS*. You can have Oracle files on raw disks, but you still need OS.

And there's a "hybrid" approach. Oracle on Windows relies on NTFS filesystem to do most of the file management work, but datafile I/O does not go through NTFS regular I/O path. That's why talking about filesystem block size, or more correctly I/O chunk size, has no practical meaning. This is of course only true if you install Oracle on NTFS instead of raw. Very few people use raw disks on Windows; there's no need.

Yong Huang


即使裸设备,也是有块的。。。。。。。。。 ,虽然绕过了操作系统,我觉得,读取数据还是存在晶晶版主所说的那个过程,无论是采用Filesystem存储,还是采用裸设备。Yong Huang 你觉得呢?

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
29#
发表于 2008-11-9 08:47 | 只看该作者
原帖由 foxmile 于 2008-11-8 07:38 发表

即使裸设备,也是有块的。。。。。。。。。 ,虽然绕过了操作系统,我觉得,读取数据还是存在晶晶版主所说的那个过程,无论是采用Filesystem存储,还是采用裸设备。Yong Huang 你觉得呢?


Blocks for raw disks (or disk partitions) are determined by Oracle; one I/O is db_block_size (or multiple if Oracle reads multiple at a time). The concept of block size for a raw disk does not exist at the OS level, unless you mean allocation size, i.e. sector size.

"读取数据还是存在晶晶版主所说的那个过程" is correct.

Yong Huang

使用道具 举报

回复
论坛徽章:
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
30#
发表于 2008-11-9 09:15 | 只看该作者
原帖由 foxmile 于 2008-11-8 21:27 发表

你的意思是并不是每次都提交操作系统去读操作系统的块,那oracle怎么判断,什么时候去读取,而什么时候不读取呢?
我理解,肯定是会发生的,只是Oracle怎么提高这个效率呢?可是Oracle是不能直接去管理操作系统的块的啊。


其实,没什么奇怪的,只要获得OS的授权就可以,ORACLE亲自去做I/O不是没可能的,就像一个元帅或将军领兵打仗,只要下面士兵接到命令,就可以去实施战争,当然,元帅和将军也可以去亲自去实施战争。
其实,我只是在相关资料上看到过,当时我也很惊讶,那可是几年前的事情了,觉得ORACLE跨越OS去做一些I/O工作不可思议,可后来接触MSSQL后,尤其是它的引擎架构后,觉得还是有可能得,因为,MSSQL引擎里就有相应的实施OS功能的模块,回头我试着收集一下资料,看还能不能找到,不过,大家能针对这个问题展开讨论,让人受益匪浅,高兴。。。

使用道具 举报

回复

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

本版积分规则 发表回复

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