当前位置:七道奇文章资讯数据防范Oracle防范
日期:2011-01-25 22:55:00  来源:本站整理

Oracle数据块原理深化解析-入门底子[Oracle防范]

赞助商链接



  本文“Oracle数据块原理深化解析-入门底子[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
数据块(Oracle Data Blocks),本文简称为“块”,是Oracle最小的存储单位,Oracle数据存放在“块”中.一个块占用一定的磁盘空间.分外注意的是,这里的“块”是Oracle的“数据块”,不是操作系统的“块”.

  Oracle每次恳求数据的时刻,都是以块为单位.也就是说,Oracle每次恳求的数据是块的整数倍.假如Oracle恳求的数据量不到一块,Oracle也会读取整个块.所以说,“块”是Oracle读写数据的最小单位大概最基本的单位.

  块的尺度大小由初始化参数DB_BLOCK_SIZE指定.具有尺度大小的块称为尺度块(Standard Block).块的大小和尺度块的大小差别的块叫非尺度块(Nonstandard Block).同一数据库中,Oracle9i及以上版本支持同一数据库中同时利用尺度块和非尺度块.Oracle答应指定5种非尺度块(Nonstandard Block).

  操作系统每次履行I/O的时刻,是以操作系统的块为单位;Oracle每次履行I/O的时刻,都是以Oracle的块为单位.

  Oracle数据块大小普通是操作系统块的整数倍.

  数据块的格局(Data Block Format)

  块中存放表的数据和索引的数据,无论存放哪类范例的数据,块的格局都是相同的,块由块头(header/Common and Variable),表目录(Table Directory),行目录(Row Directory),空余空间(Free Space)和行数据(Row Data)五部份构成,

  以下图所示.

  块头(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语句会使块中的安闲空间增添.当利用DELETE语句删除块中的记录大概利用UPDATE语句把列的值更改成一个更小值的时刻,Oracle会释放出一部份安闲空间.释放出的安闲空间并不一定是持续的.普通情形下,Oracle不会对块中不持续的安闲空间举行归并.因为归并数据块中不持续的安闲空间会影响数据库的性能.只有当用户举行数据插入(INSERT)大概更新(UPDATE)操作,却找不到持续的安闲空间的时刻,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)来管理和跟踪数据块,这种块的空间管理方法叫“自动管理”.自动管理有下面的好处:

  ◆易于利用

  ◆更好地操纵空间

  ◆可以对空间举行及时调整

  块中安闲空间的手动管理

  用户可以通过PCTFREE, PCTUSED来调整块中空间的利用,这种管理方法叫手动管理.相关于自动管理,手动管理方法对比麻烦,不简单掌握,简单造成块中空间的浪费.

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

  PCTUSED也是用于设置一个百分比,当块中已利用的空间的比例小于这个百分比的时刻,这个块才被标识为有效状况.只有有效的块才被答应插入数据.

  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .