消除行链接

行链接
当第一次插入行时,由于行太长而不能容纳在一个数据块中时,就会发生行链接。在这种情况下,oracle会使用与该块链接的一块或多块数据块来容纳该行的数据。行连接经常在插入比较大的行时才会发生,如包含long, long row, lob等类型的数据。在这些情况下行链接是不可避免的。
行迁移
当修改不是行链接的行时,当修改后的行长度大于修改前的行长度,并且该数据块中的空闲空间已经比较小而不能完全容纳该行的数据时,就会发生行迁移。在这种情况下,Oracle会将整行的数据迁移到一个新的数据块上,而将该行原先的空间只放一个指针,指向该行的新的位置,并且该行原先空间的剩余空间不再被数据库使用,这些剩余的空间我们将其称之为空洞,这就是产生表碎片的主要

少量的行链接不会对性能有很大的影响,一个大致准则是如果表中超过15%的数据行是行链接的,那么就要注意了

可以再MOVE同时设置更高的PCTFREE

alter table emp move picture 40

使用ANALYZE命令查看行链接情况

@?/rdbms/admin/utlchain.sql

上面的脚本创建了名为chained_rows的表,现在可以运行ANALYZE命令,填充该表

analyze table emp list chain rows

接下来查询chain_rows表

select count(*) from chained_rows where table_name=‘EMP’;

消除行链接:
1.创建一个临时表保存原来存储行链接的行
2.从原始表中删除连接的行
3.将临时表中的数据行插入到原始表中

create table temp_emp as select * from emp where rowid in(select headword from chained_rows where table_name=‘EMP’);
delete from emp  where rowid in(select headword from chained_rows where table_name=‘EMP’);
insert into emp select * from temp_emp;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值