ORACLE 行迁移和行链接

1. 行迁移

当发出update导致记录行长增加,block的剩余空间不足以存放这条记录,就会产生行迁移,发生行迁移时rowid不会改变,原来的block 中会用一个指针存放这条记录在新的block中的地址,发生行迁移会对性能产生影响,因为读这条记录会读两个BLOCK。

  • 行迁移:导致应用需要访问更多的数据块,性能下降。
  • 预防行迁移:1. 将数据块的PCTFREE调大;2. 针对表空间扩大数据块大小

消除行迁移的办法:

  1. 创建行迁移表,$ORACLE_HOME/rdbms/admin目录下的utlchain.sql脚本创建chained_rows表。
  2. 禁用所有其它表上关联到此表上的所有限制。例如外键。
  3. 将存在有行迁移的表(用table_name代替)中的产生行迁移的行的rowid放入到chained_rows表中。
  4. 将表中的行迁移的row id放入临时表中保存。
  5. 删除原来表中存在的行迁移的记录行。
  6. 从临时表中取出并重新插入那些被删除了的数据到原来的表中,并删除临时表。
  7. 启用所有其它表上关联到此表上的所有限制。

  注:步骤3,使用如下语句完成,analyze table table_name list chained rows into chained_rows;

  作用是将产生行迁移的记录rowid存入表chained_rows。

2. 行链接

当一个BLOCK不足以存放下一条记录的时候,就会发生行连接,这个时候oracle会把这条记录分成几个部分,分别存放在几个block中,然后把这几个block chain起来。行连接同样会影响性能,因为读一条记录至少会读两个BLOCK.

  • 行链接只能使用加大数据块大小来解决。
  • 消除行链接的方法和消除行迁移的一致。
时间: 2024-11-05 11:28:04

ORACLE 行迁移和行链接的相关文章

Oracle行迁移和行链接

行迁移和行链接都会导致Oracle性能下降,这篇文章将介绍什么是行迁移和行链接,它们带来的问题,如何来判断它们,并提供了解决它们的办法. 什么是行迁移和行链接 行迁移 Oracle的数据块会保留部分空间供以后更新使用,通常的数据块结构如下: PCTFREE定义一个块保留的空间百分比,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被update(具体看下面的PCTFREE介绍). 当一条记录被更新时,数据库引擎首先会尝试在它保存的数据块中寻找足够的空闲空间,如果没有

10、管理数据库存储(行迁移及行连接)

管理数据库存储 1block=8192bytes 案例1:行迁移 1.表中数据如何存储 create table test as select * from hr.employees; create index idx_test on test(employee_id); 只看执行计划,不执行结果. set autotrace traceonly statistics; select * from test where employee_id>0; 强制走索引 select /*+index(t

模拟Oracle行迁移和行链接

行链接消除方法创建大的block块------------------ 参考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/test/

Oracle 行链接(Row chaining) 与行迁移(Row Migration)

场景:如果VarChar和VarChar2更经常修改,且修改的数据长度每次都不一样,这会引起“行迁移”现象 概念: 行链接(Row chaining) 与行迁移(Row Migration)当一行的数据过长而不能插入一个单个数据块中时,可能发生两种事情:行链接(row chaining)或行迁移(row migration). 行链接当第一次插入行时,由于行太长而不能容纳在一个数据块中时,就会发生行链接.在这种情况下,oracle会使用与该块链接的一块或多块数据块来容纳该行的数据.行连接经常在插

消除行链接、行迁移

行迁移和行链接是经常接触到的一个概念.行链接是记录太大,一个数据块无法存储,oracle就会将其存储在相链接的块中,如果记录中数据类型包括:LONG.LONG RAW.LOB等数据类型时,行链接则无法避免了,可以在AWR实例活动统计部分的table fetch continued row分析可以看出当前数据库中链接行的数量:行迁移是指在update时,数据块已满,记录更新后记录长度增加了,oracle会将整条记录迁移到新的块中,行迁移后ROWID是不变的.参考ID 102989.1消除行链接和行

深入解析SQL Server行迁移记录

总长未超过8060字节,变长和定长列存储在同一页/记录中的记录称为行内数据记录.行内记录最常见了,因为一般的记录长度都是在8060字节内的.行内记录理论上都是存放在一个页面中的,这种记录的结构相对简单,格式也相对固定. 行内记录会包含一些常见数据类型的列,如int.char(n).varchar(n).datetime2.real.money等.这些类型的数据有变长的也有定长的,所以在更新变长列的数据时,会使记录长度增大,到超出空闲空间容量时,这样即使此记录小于8060字节,也会造成此记录在这一

模拟行迁移试验

1.创建scott模式 [[email protected] dbs]$ sqlplus '/as sysdba' SQL*Plus: Release 10.2.0.1.0 - Production on Mon Feb 17 14:59:02 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0

【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线

一.段的类型: 1.什么是段:段是存储单元. 1.段的类型有: 表 分区表 簇表 索引 索引组织表(IOT表) 分区索引 临时段 undo段 lob段(blob ,clob) 内嵌表(record类型,table类型) 启动段 :打开数据库时要装入的数据字典系统信息,故在系统表空间内. 注意:smon 回收不用的临时段和undo段. 2.表: 表是存储数据的逻辑单位. 表的功能: 存储.管理数据的基本单元, 表的类型: 普通表:堆表, 例:查询表的行的平均长度 AVG_ROW_LEN 平均长度

Oracle设置列宽,行数

Oracle列宽.行数设置 在命令行进行简单的数据库操作,有时显示出来的数据出现换行情况,为了让数据更加清晰美观,这时可以设置行宽和列宽. 首先设置行数:set pagesize 300(根据个人要求设置); 然后设置列宽:set linesize 200/150(根据个人要求设置); 最后看一下效果,如下: 设置之前 设置之后 这样所有数据显示明了清晰,赶快试一下吧. 原文地址:https://www.cnblogs.com/s1-myblog/p/10888403.html