捷凌网安Oracle频道
中国IT教育
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 讨论
 您现在的位置: 捷凌网安 >> Oracle >> 安装配置 >> 正文
轻松掌握行分链与行迁移的相关概念

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-3-27 0:00:25

  在实际的应用中,如果行分链与行迁移经常删除,那么可能不能重用块中的自由空间,所以对于这种情况,我们要利用空间的话,可以把pctused设置高点主要是在INSERT操作期间引发行分链操作。而行的迁移主要由UPDATE操作引起。

    行链接

   行链接: Insert or Update引起,一个Row存在不同的block中, 行不同部分通过不同块地址(ROWID)链成一个链,可以通过设置大的DB_BLOCK_SIZE来减少行链接的发生,但无法避免(LOB)

    行迁移: Update引起,由于PCTFREE过小,ROWID未变, 可以通过增大PCTFREE的值减少行迁移的发生。

    行分链是DB_BLOCK_SIZE设置不够大,以至于对于一些大的行(比如varchar2(32666),blob,clob的长度,大于块大小(比如4K))这样一个块肯定不能保存一行记录,就需要将行分开保存到不同的块中。特别是blob这样的类型,最好设置一个单独的表空间来保存实际的数据。

    包含一个LONG/LONG RAW列时,在这种情况下,后者通常保存在最后oracle维护一个LOB定位器允许对行外LOB快速访问。LOB定位器,大约有24个字节大小,DISABLE STORAGE IN ROW参数来实现保存在行外(分散开),不管数据大小行分链很难控制(除非通过选择DB_BLOCK_SIZE足够大,可以装下整个行,这通常是不可能的)。然而,行迁移可以通过CREATE / ALTER TABLE命令的PCTFREE和PCTUSED参数有效控制。

  >>>>>另一种发生行链接是在行迁移不成功的情况下进行的,如UPDATE操作引起。当更新一行使其大小增加

    而块中的当前自由空间不足以放下该行,那么就把整个行取出来放到一个有足够空间的块中(如果没有块有所需的空间放整行,行要分成链;如果即使行分成链仍然没有足够的空间,那么产生一个错误消息"ORA-1650-55:Unable to extend)

    行迁移

    我们如果要更新一行(更新总是允许的),并将其行加大,而加大的行所需要的空间大于块中的自由空间时。假使我们把一行中多出的空间放到另一个块中,而另一行放在原来块中(这就是行分链接),从而使原来块100%的填充。这样好象只会在单独的行时会发生,oracle会把这整行迁移到其他能容纳空间的块中(这就是行迁移)。这样会在原来的块中留一个行头,行头中保留了放实际行的块的地址。对于行链接,但是应用程序从来不知道这些,使用SQL也没有什么不同,他只是性能上的原因。如果通过索引来读取这行,索引会指向最初的新块不仅是使用了两个左右的IO读取索引,加上一个IO读取这张表1通过使用PCTFREE保持每块中的自由空间,允许行仍位于原来的块中,不用管这种扩张。

    如果PCTFREE为0,那么所有的自由空间将被INSERT使用,后续的UPDATE将使行迁移到另外一个块中,以适合扩展的需要。

    在理想的情况下,设置PCTFREE为位于行大小的中间值与最大值之间。例如,如果行大小的中间值估计为大约900字节,最大的行大小为1255字节,那么设置PCTFREE值在10(缺省)和30之间是比较合理的。

  • 上一篇文章:

  • 下一篇文章:
  •  
     最进更新
    普通文章如何获得Oracle DBA工作?05-11
    普通文章分别删除数据表记录的方法05-11
    普通文章实例讲解删除表空间时存在的05-11
    普通文章Oracle Wait Event:Data fil05-11
    普通文章重复利用这个外部表的表结构05-11
    普通文章Oracle 9i数据库的用户创建以05-11
    普通文章Oracle数据库应用程序中RAID05-11
    普通文章如何更改监听器设置05-11
    普通文章Oracle中SQL语句执行效率的查05-11
    普通文章掌握数据库链路的建立和使用05-11
     
     推荐文章
    推荐文章研究人员发现攻击Oracle数据04-30
    推荐文章研究人员找到新方法黑掉Orac04-30
    推荐文章数据库产业商业模式大猜想04-30
    推荐文章一种并发控制的精典案例04-30
    推荐文章讲解Oracle在Solaris下的性能04-30
    推荐文章Oracle中为什么会产生回滚与04-30
    推荐文章实例讲解sql_trace和access 04-30
    推荐文章Oracle数据库9i和10g环境下使04-30
    推荐文章Oracle数据库后台进程的具体04-30
    推荐文章Oracle数据库中Undo数据段的04-30
     
     热点文章
    普通文章PB内置Oracle数据库接口的使03-27
    普通文章用最简单的方法记录Oracle语03-27
    推荐文章教你快速掌握Oracle数据库的03-27
    推荐文章详细讲解"Oracle"数据库的“03-27
    普通文章深入讲解Oracle数据库的多栏03-27
    推荐文章教你快速掌握一个简单的Orac03-27
    推荐文章初学者应该如何理解Oracle的03-27
    普通文章怎样将"Oracle"的外部表汉字03-27
    推荐文章解决不同字符集数据库间的数03-27
    普通文章Oracle的window服务启动时并03-27

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号