ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 行迁移和行链接

行迁移和行链接

原创 Linux操作系统 作者:tonywi888 时间:2011-12-20 22:18:34 0 删除 编辑
row migration和row chaining
oracle block由三个部分组成,header,free space,data
数据块头head:主要包含数据块地址的一些基本信息和段的类型,以及表和包含有数据的实际行的地址。
自由空间free space:是指可以为以后的更新和插入操作分配的空间,其大小受pctfree和pctused两个参数影响。
实际数据data:是指在行内存储的实际数据。

当创建或者更改任何表和索引的时候,oracle在空间控制方面使用两个存储参数:
pctfree:为将来更新已经存在的数据预留空间的百分比。
pctused:用于为插入一新行数据的最小空间的百分比。这个值决定了块的可用状态。可用的块是可以执行插入的块,不可用状态的块只能执行行删除和修改,可用状态的块被放在freelist中。
当表中的数据不能在一个数据block中放入的时候,就会发生行链接和行迁移。

 row migration:当一行记录初始可以存储在一个block中,由于更新导致行长增加了,而block的自由空间已经完全满了,就会产生行迁移。由于表的pctfree参数设置太小,而导致没有空间容纳更新的记录,可以调整和控制清除的。
row chaining:第一次插入数据是,如果一个block不能存放一样记录,oracle将使用这个段中其他block存储,行链接发生在比较大的行上,例如行上有long、long raw、lob等数据类型的字段,这种情况行链接不可避免的产生。主要由于数据库的db_block_size不够大,只有增大db_block_size没有任何办法。一般在建库初期设定好,否则没有太多可以调整的地方。

监测方法:
利用oracle数据库自身提供的脚本utlchain.sql生成chained_rows表,然后利用
analyze table table_name list chained rows into chained_rows命令逐个分析表,将分析结果存入chained_rows中。

清除方法:
对于行迁移一般分两步,控制行迁移的增长,使其不再增多;清除以前存在的行迁移。
确定pctfree参数的大小,有两种方法:
1、利用公式来设定pctfree的大小。
analyze table table_name estimate statistics命令来分析要修改pctfree的表,然后查看user_tables中的avg_row_len列值,avg_row_len1,然后大量对表操作,执行上面的命令得到avg_row_len2,然后用公式:
100*(avg_row_len2-avg_row_len1)/(avg_row_len2-avg_row_len1+原始avg_row_len)
2、差分微调的方法,一点一点增大,每次不要超过5%,然后使用analyze table table_name list chained rows into chained_rows命令分析每次所有的情况,不要调的过大,一般在40%以下就可以了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8570952/viewspace-713655/,如需转载,请注明出处,否则将追究法律责任。

下一篇: keep池和recycle池
请登录后发表评论 登录
全部评论

注册时间:2008-02-25

  • 博文量
    159
  • 访问量
    709210