Oracle数据块_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1801 | 回复: 0   主题: Oracle数据块        下一篇 
chengjun.xia
注册用户
等级:中士
经验:201
发帖:8
精华:0
注册:1970-1-1
状态:离线
发送短消息息给chengjun.xia 加好友    发送短消息息给chengjun.xia 发消息
发表于: IP:您无权察看 2016-3-23 17:42:10 | [全部帖] [楼主帖] 楼主

    Oracle存储数据的最小单位称为数据块(data block)(也叫作逻辑块logical blockOracle块或页page)。

    一个数据块对应于磁盘上数个字节的物理数据库空间。块的标准大小由初始化参数DB_BLOCK_SIZE指定。具有标准大小的块称为标准块(standard block)。块的大小和标准块的大小不同的块叫非标准块(nonstandard block)。

    块头(header/Common and Variable):存放块的基本信息,如块的物理地址,块所属的段的类型(是数据段还是索引段)。

    表目录(Table Directory):存放表的信息,即如果一些表的数据被存放在这个块中,那么这些表的相关信息将被存放在表目录中。

    行目录(Row Directory):如果块中有行数据存在,则这些行的信息将被记录在行目录中,这些信息包括行的地址等。

    行数据(Row Data):是真正存放表数据和索引数据的地方。这部分空间是已被数据行占用的空间。

    空余空间(Free Space):空余空间是一个块中未使用的区域,这片区域用于新行的插入和已经存在的行的更新。

    头部信息区(Overhead):块头(header/Common and Variable),表目录(Table Directory),行目录(Row Directory)这三部分合称为头部信息区(Overhead)。头部信息区不存放数据,它存放整个块的信息。头部信息区的大小是可变的,一般来说,头部信息区的大小介于84字节(bytes)到107字节(bytes)之间。

    数据块中自由空间的使用:当往数据库中插入(INSERT)数据时,块中的自由空间会减少。当对块中已经存在的行进行修改(UPDATE)时(使记录的长度增加),块中的自由空间也会减少。DELETE语句和UPDATE语句可以使块中的自由空间增加。释放出的自由空间不一定是连续的,通常情况下,Oracle不会对块中不连续的自由空间进行合并。因为合并数据块中不连续的自由空间会影响数据库的性能。只有当用户进行数据INSERTUPDATE操作,却找不到连续的自由空间时,Oracle才会合并数据块中不连续的自由空间。对于块中的自由空间,Oracle提供两种管理方式:自动管理,手动管理。

    行链接和行迁移(Row Chaining and Migrating

    行链接(Row Chaining):如果我们往数据库中INSERT一行数据,这行数据很大,以至于一个数据块存放不下一整行,Oracle就会把一行数据分作几段存在几个数据块中,这个过程叫行链接(Row Chaining)。

    行迁移(Row Migrating):数据块中存在一条记录,用户执行UPDATE更新这条记录,这个UPDATE操作使这条数据变长,这时候,Oracle在这个数据块中进行查找,但是找不到能够容纳下这条数据的空间,无奈之下,Oracle只能把整行数据迁移到一个新的数据块。原来的数据块中保留一个指针,这个指针指向新的数据库。被移动的这条记录的ROWID保持不变。

    无论是行链接还是行迁移,都会影响数据库的性能。Oracle在读取这样的记录的时候,Oracle会扫描多个数据块,执行更多的I/O

    块中自由空间的自动管理:Oracle使用位图(bitmap)来管理和跟踪数据块,这种块的管理方式叫作自动管理。

    块中自由空间的手动管理:用户可以通过PCTFREEPCTUSED来调整块中空间的使用,这种管理方式叫作手动管理。相对于自动管理,手动管理的方式比较麻烦,不容易掌握,容易造成块中空间的浪费。

    PCTFREE参数用于指定块中必须保留的最小空闲空间百分比。之所以要预留这样的空间,是因为UPDATE时,需要这些空间。如果UPDATE时没有这些空间,Oracle就会分配一个新的块,这样会产生行迁移(Row Migrating)。

    PCTUSED参数也是用于设置一个百分比,当块中已使用的空间的比例小于这个百分比的时候,这个块才被标记为有效状态,只有有效的块才被允许插入数据。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论