行链接发生在INSERT阶段数据块无法容纳过大数据时,行迁移发生在UPDATE阶段时原数据块无法容纳增大的数据时。

因为需要扫描更多的数据块才能得到所需的信息,所以行链接和行迁移会导致系统的查询效率降低。行迁移和行链接都会导致oracle性能下降。

 

例一行链接:

①创建测试表
SQL> create table t_row_chaining (x char(2000),y char(2000),z char(2000),q char(2000)); Table created. ②插入初始数据 SQL> insert into t_row_chaining values('a','b','c','d'); 1 row created. SQL> commit; Commit complete. 使用ANALYZE命令对表t_row_chaining进行分析,以便验证该表是否发生了行链接。

SQL> ANALYZE TABLE t_row_chaining LIST CHAINED ROWS;
ANALYZE TABLE t_row_chaining LIST CHAINED ROWS
*
ERROR at line 1:
ORA-01495: specified chain row table not found(原因是CHAINED_ROWS表没有创建导致
④使用Oracle自带的utlchain.sql脚本创建CHAINED_ROWS表,并再次分析表
SQL> @?/rdbms/admin/utlchain.sql

Table created.

SQL> ANALYZE TABLE t_row_chaining LIST CHAINED ROWS;

Table analyzed.
测试行链接,由于初始化的数据无法在一个数据块中存放(因为测试表所有字段都为char类型所致),此时发生了行链接。

SQL> select owner_name,table_name,head_rowid,analyze_timestamp from chained_rows;

OWNER_NAME                     TABLE_NAME                     HEAD_ROWID
------------------------------ ------------------------------ ------------------
ANALYZE_T
---------
SYS                            T_ROW_CHAINING                 AAAVolAABAAAWOiAAA
10-OCT-16

 

 

 

例二行迁移:

①创建测试表
SQL> create table t_row_migrating (x varchar2(2000),y varchar2(2000),z varchar2(2000),q varchar2(2000)); Table created.
②插入初始化数据

SQL> insert into t_row_migrating values('a','b','c','d'); 1 row created. SQL> commit; Commit complete.
此时由于是VARCHAR2类型的字段(此类型字段可以自适应数据的长短),此时数据完全可以在一个数据块中存放,因此此时不会发生行链接。分析表t_row_migrating,并验证是否存在行链接。


SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;

Table analyzed.

SQL> select owner_name,table_name,head_rowid,analyze_timestamp from chained_rows;(还是刚才测试行链接时的记录)

OWNER_NAME                     TABLE_NAME                     HEAD_ROWID
------------------------------ ------------------------------ ------------------
ANALYZE_T
---------
SYS                            T_ROW_CHAINING                 AAAVolAABAAAWOiAAA
10-OCT-16


④我们使用t_row_chaining中的大数据对表t_row_migrating进行更新,使之发生行迁移。

SQL> update t_row_migrating set (x,y,z,q)=(select * from t_row_chaining);

1 row updated.

SQL> commit;

Commit complete.
对表t_row_migrating进行分析,并验证行链接
SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;

Table analyzed.


SQL> select owner_name,table_name,head_rowid,analyze_timestamp from chained_rows;

OWNER_NAME                     TABLE_NAME                     HEAD_ROWID
------------------------------ ------------------------------ ------------------
ANALYZE_T
---------
SYS                            T_ROW_CHAINING                 AAAVolAABAAAWOiAAA
10-OCT-16

SYS                            T_ROW_MIGRATING                AAAVonAABAAAW8JAAA
10-OCT-16

 


posted on 2016-10-12 22:42  Tomatoes  阅读(668)  评论(0编辑  收藏  举报