查看: 24023|回复: 70

[原创] 关于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
跳转到指定楼层
1#
发表于 2008-11-4 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、oracle数据块和操作系统数据块是什么关系?前者是后者的倍数么?或者说,没有必然的大小关系。
2、oracle数据块是可以启用多块的,比如8k的默认块大小,可以启用2k的块大小,在windows下,操作系统块的大小为4k,这种情况下,访问2k的块和访问8k的块有什么区别?
3、我们读取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
2#
发表于 2008-11-4 18:06 | 只看该作者
嗯,这个问题有点意思,我的理解如下:
1、ORACLE数据块是OS块的倍数;
2、我的印象里,ORACLE块最小为4K,ORACLE数据块不能比OS块更小;
3、这个问题就不好回答了,毕竟ORACLE是基于OS之上的,很多操作都是在OS完成的,因此,ORACLE的读数据操作虽然ORACLE本身不会读OS其他块,但其产生的一些类似递归的操作有可能要读到其他块,但我觉得这要有OS来完成。
4、EXTENT内的ORACLE块是连续的,一个ORACLE块内的OS块也是连续的,因此,EXTENT内的OS块也是连续空间。

使用道具 举报

回复
论坛徽章:
0
3#
发表于 2008-11-4 20:32 | 只看该作者
ORACLE数据块的SIZE可以是2KB,4KB,8KB,16KB.
OS块的大小根据OS的不同而不同, 但大多都是512 BYTES 到2K.可以说一个ORACLE数据块有至少一个或多个OS BLOCK组成.
当读取oracle数据库里面的数据时,由于OS BLOCK和操作系统是在最底层直接和硬件交互的,不可避免的是要操作操作系统的块的.

个人见解,供参考

使用道具 举报

回复
论坛徽章:
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
4#
发表于 2008-11-4 22:17 | 只看该作者
This is a frequently asked question. First we need to make a distintion between OS space allocation block size (i.e. sector size, 512 bytes on most platforms) and I/O chunk size. Neverwinter_Newman may be describing the allocation block size. But what's relevant to Oracle performance is I/O chunk size, except for redo log writing, which matches allocation block size. You find the I/O chunk size by doing some I/O and watch sar /b output. Not sure what tool you can use on Windows. But you can always use Oracle's db file scan wait trace file to find Oracle's negotiated chunk size with OS.

I think it's possible you create a database with smaller db_block_size than the OS I/O chunk size. But if you do that, I/O would be bad because you ask for 2 I/O's and the OS has to do two I/O's while it actually CAN do the same work in one. So always use a bigger or the same-size db_block_size as OS I/O chunk size.

Since Oracle redo writing uses chunk size of 512 bytes (or 1k on HPUX and a few other OS'es), it's always better to place redo logfiles on raw partitions or equivalent (Veritas Quick I/O, Oracle ASM etc), bypassing filesystems.

Yong Huang

[ 本帖最后由 Yong Huang 于 2008-11-4 12:49 编辑 ]

使用道具 举报

回复
论坛徽章:
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
5#
发表于 2008-11-5 07:40 | 只看该作者
YONGHUANG版主的回答很精辟,学习了。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
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
6#
 楼主| 发表于 2008-11-5 08:43 | 只看该作者
原帖由 Neverwinter_Newman 于 2008-11-4 20:32 发表
ORACLE数据块的SIZE可以是2KB,4KB,8KB,16KB.
OS块的大小根据OS的不同而不同, 但大多都是512 BYTES 到2K.可以说一个ORACLE数据块有至少一个或多个OS BLOCK组成.
当读取oracle数据库里面的数据时,由于OS BLOCK和操作系统是在最底层直接和硬件交互的,不可避免的是要操作操作系统的块的.

个人见解,供参考

我做了个验证,windows下的块是4k,那我使用的工具所显示的块大小应该就是Yong Huang  所说的I/O chunk size。
而文档里面提到的应该就是OS space allocation block size。
这个地方概念之前不清晰。

[ 本帖最后由 foxmile 于 2008-11-5 08:49 编辑 ]

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
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
7#
 楼主| 发表于 2008-11-5 08:47 | 只看该作者
原帖由 sqysl 于 2008-11-4 18:06 发表
嗯,这个问题有点意思,我的理解如下:
1、ORACLE数据块是OS块的倍数;
这个经过Yong Huang的解释,我明白了。实际上是概念不清晰。
2、我的印象里,ORACLE块最小为4K,ORACLE数据块不能比OS块更小;
这个oracle最小的块是2k,在设置了db_2k_cache_size之后,就可以在建表空间的时候使用2k的块。
3、这个问题就不好回答了,毕竟ORACLE是基于OS之上的,很多操作都是在OS完成的,因此,ORACLE的读数据操作虽然ORACLE本身不会读OS其他块,但其产生的一些类似递归的操作有可能要读到其他块,但我觉得这要有OS来完成。
Yong Huang的回答,我还得再理解一下。
4、EXTENT内的ORACLE块是连续的,一个ORACLE块内的OS块也是连续的,因此,EXTENT内的OS块也是连续空间。
这个我需要求证一下。

使用道具 举报

回复
论坛徽章:
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
8#
发表于 2008-11-5 08:52 | 只看该作者
那看来ORACLE可以有2K的块,是我记错了。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
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
9#
 楼主| 发表于 2008-11-5 08:55 | 只看该作者
下面是我使用操作系统工具和sqlplus查看的操作系统块、数据库块
linux:
su -
Password:
[root@my root]# /sbin/tune2fs -l /dev/sda1 | grep Block
Block count:              104391
Block size:               1024
Blocks per group:         8192

sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.6.0 - Production on Sun Nov 2 21:58:37 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192
SQL>
----oracle数据库块是操作系统块的8倍。

windows:
C:\>fsutil fsinfo ntfsinfo c:
NTFS 卷序列号 :       0xf4445037444ffabe
版本 :                         3.1
区数量 :                  0x00000000030d40c3
簇总数 :                  0x000000000061a818
可用簇  :                  0x0000000000313f7d
保留总数 :                  0x0000000000000040
每个扇区字节数  :               512
每个簇字节数 :               4096
每个 FileRecord 段的字节数    : 1024
每个 FileRecord 段的簇数 : 0
Mft 有效数据长度 :           0x00000000044e4000
Mft 起始 Lcn  :                  0x00000000000c0000
Mft2 起始 Lcn :                  0x000000000030d40c
Mft 区域起始 :                  0x00000000000c44e0
Mft 区域结尾   :                  0x00000000000c5bc0
上面的簇字节数即为块大小。
C:\>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on 星期日 11月 2 22:01:51 2008

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192
SQL>
oracle数据库块是操作系统块的2倍。


手头没有其他环境,至少我确认了资料上的话在这两个操作系统里面是正确的,其他系统的验证之后继续跟贴。

[ 本帖最后由 foxmile 于 2008-11-2 22:20 编辑 ]

红色的部分,应当就是  Yong Huang  所说的I/O chunk size。
也就是说,实际上文档以及大师们所说的数据库块是操作系统块的整数倍,说的不是这个大小,而是OS space allocation block size。


[ 本帖最后由 foxmile 于 2008-11-5 08:56 编辑 ]

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
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
10#
 楼主| 发表于 2008-11-5 09:02 | 只看该作者
请教Yong Huang:
I think it's possible you create a database with smaller db_block_size than the OS I/O chunk size. But if you do that, I/O would be bad because you ask for 2 I/O's and the OS has to do two I/O's while it actually CAN do the same work in one. So always use a bigger or the same-size db_block_size as OS I/O chunk size.
我是当时在验证这个问题的时候,在一个8k数据库块的数据库上面启用了2k的数据库块,也就是说,在这种情况下,启用这个数据库块和8k的I/O读取并没有太大的区别,只是操作系统做了一些无用功,导致系统性能下降了。

Since Oracle redo writing uses chunk size of 512 bytes (or 1k on HPUX and a few other OS'es), it's always better to place redo logfiles on raw partitions or equivalent (Veritas Quick I/O, Oracle ASM etc), bypassing filesystems.
上面这句算是redo需要和其他文件分离的一个主要原因吧?


你理解文档上说的数据库块是操作系统块的整数倍,是说的OS space allocation block size不是?

[ 本帖最后由 foxmile 于 2008-11-5 09:05 编辑 ]

使用道具 举报

回复

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

本版积分规则 发表回复

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