zoukankan      html  css  js  c++  java
  • 【练习】行迁移和行链接

    行链接发生在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
    
    
    
    
    
  • 相关阅读:
    再次或多次格式化导致namenode的ClusterID和datanode的ClusterID之间不一致的问题解决办法
    Linux安装aria2
    POJ 3335 Rotating Scoreboard 半平面交
    hdu 1540 Tunnel Warfare 线段树 区间合并
    hdu 3397 Sequence operation 线段树 区间更新 区间合并
    hud 3308 LCIS 线段树 区间合并
    POJ 3667 Hotel 线段树 区间合并
    POJ 2528 Mayor's posters 贴海报 线段树 区间更新
    POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
    POJ 3468 A Simple Problem with Integers 线段树成段更新
  • 原文地址:https://www.cnblogs.com/tomatoes-/p/5954712.html
Copyright © 2011-2022 走看看