oracle行迁移和行链接优化

一. 概述、产生原因及影响

row migration:When a row is to be updated and it cannot find the necessary free space in its block,the oracle will move the entie row into a new block and leave a pointer from the orginal block to the new locatio.This process is called row migration

row chain:When a row is too large to fit into any block,row chaining occurs.In this case,the oracle devide the row into smaller chunks. each chunk is stored in a block along with the necessary poiters to retrive and assemble the entire row.

行迁移:当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能容纳在当前块,需要进行行迁移。行迁移意味着整行数据都被移动,原始的数据块上仅仅保留的是指向新块的一个地址信息(指针),并且该行原先空间不再被数据库使用,这些剩余的空间称之为空洞,也是产生表碎片的主要原因,表碎片基本上也是不可避免的,但是可以通过一些策略使其降低到一个可以接受的程度。注意,即使发生了行迁移,发生行迁移的行的rowid还是不会变化,这也是行迁移会引起数据库I/O性能降低的原因。可以认为行迁移是行链接的一种特殊形式,但是起因于行链接有很大不同。

产生:update

行链接:当一行数据太大而不能在一个单数据块容纳时,会产生行链接。例如当使用4kb的oracle数据块大小,而需要插入一行数据是8k,Oracle则需要使用三个数据块分成片来存储。因此,引起行链接的情形通常是,表上行记录的大小超出了数据库oracle块的大小。

产生原因:The row is too large to fit into one data block when it isfirstinserted.

表上使用了Long或Long raw数据类型的时候容易产生行链接(此时行链接通常为不可避免的)。其次表上使用多余255列时oracle会将这些过宽的表分片而产生行链接。


影响:行迁移对索引读产生额外的I/O,对全表扫描没什么影响。行连接则影响索引读和全表扫描。总的来说行迁移和行链接引起性能下降的原因主要是由于多余的I/O造成的。当通过索引访问产生行迁移的行时,数据库必须扫描一个或一个以上的数据块才能检索到该行的数据。

二. 模拟行迁移和行链接

行链接

------------------ 参考tom kyte的例子--------------------------------------------
--创建4k blocksize的表空间
SQL> alter system set db_4k_cache_size=1m scope=both;

System altered.
SQL> create tablespace tbs1 datafile '/u01/app/oracle/oradata/orcl/tbs_1.dbf' size 100m blocksize 4k;

Tablespace created.
--行链接测试
--使用定列宽的char类型来创建行链接测试表
SQL> create table row_chain_demo(
  2  x int primary key,
  3  a char(1000),
  4  b char(1000),
  5  c char(1000),
  6  d char(1000)
  7  ) tablespace tbs1;

Table created.
--插入数据
SQL> insert into row_chain_demo(x,a,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值