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
    
    
    
    
    
  • 相关阅读:
    如何实现类的成员函数作为回调函数
    Windows Azure Storage浏览器
    基础设施即服务系列:Windows Azure上支持Linux虚拟机
    Web Sites系列:.NET和Visual Studio上Windows Azure Web site体验
    Windows Azure 存储之本地冗余存储介绍
    上海职场六大关键词完全搜集之:职位
    初学 Delphi 嵌入汇编[2] 汇编语言关键字
    for 循环的例子
    初学 Delphi 嵌入汇编[5] 寄存器在过程与函数中的使用 续
    初学 Delphi 嵌入汇编[3] 第一个 Delphi 与汇编的例子
  • 原文地址:https://www.cnblogs.com/tomatoes-/p/5954712.html
Copyright © 2011-2022 走看看