行链接和行迁移的秘密

发表于:2012-2-20 09:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:robinson_0612    来源:51Testing软件测试网采编

分享:

  八、如何鉴别行链接和行迁移

  1. --聚合统计所创建的表,这也将使得重构整行而发生table fetch continued row                                                                
  2.                                                                                                                                     
  3. SELECT count(e) FROM row_mig_chain_demo;                                                                                            
  4.                                                                                                                                     
  5.   COUNT(E)                                                                                                                          
  6. ----------                                                                                                                           
  7.          1                                                                                                                          
  8.                                                                                                                                     
  9. SELECT a.name, b.value                                                                                                              
  10.   FROM v$statname a, v$mystat b                                                                                                     
  11.  WHERE a.statistic# = b.statistic#                                                                                                  
  12.    AND lower(a.name) = 'table fetch continued row';                                                                                 
  13.                                                                                                                                     
  14. NAME                                                                  VALUE                                                         
  15. ---------------------------------------------------------------- ----------                                                          
  16. table fetch continued row                                                 5                                                         
  17.                                                                                                                                      
  18.                                                                                                                                      
  19. --通过analyze table来校验表上的链接数                                                                                                  
  20.                                                                                                                                     
  21. ANALYZE TABLE row_mig_chain_demo COMPUTE STATISTICS;                                                                                
  22.                                                                                                                                     
  23. SELECT chain_cnt                                                                                                                    
  24.   FROM user_tables                                                                                                                  
  25.  WHERE table_name = 'ROW_MIG_CHAIN_DEMO';                                                                                           
  26.                                                                                                                                     
  27.  CHAIN_CNT                                                                                                                          
  28. ----------                                                                                                                           
  29.          3                                                                                                                          
  30.                                                                                                                                     
  31. --3条记录是链接的。显然,他们中的两条记录是迁移(记录1,记录2)和一记录是链接(记录3).                                                    
  32.                                                                                                                                      
  33. --实例启动后的table fetch continued row的总数                                                                                          
  34.                                                                                                                                      
  35. --视图v$mystat告诉我们自从实例启动后,所有的表上共有多少次为table fetch continued row.                                                 
  36.                                                                                                                                     
  37. sqlplus system/<password>                                                                                                           
  38.                                                                                                                                     
  39. SELECT 'Chained or Migrated Rows = '||value                                                                                         
  40.   FROM v$sysstat                                                                                                                    
  41.  WHERE name = 'table fetch continued row';                                                                                          
  42.                                                                                                                                     
  43. Chained or Migrated Rows = 31637                                                                                                    
  44.                                                                                                                                      
  45.                                                                                                                                      
  46. --上面的查询结果表明,可能有1个表上存在行链接被fetch了31637次,也可能有31637个表,每个表上有一个行链接,每次fetch一次。也有            
  47. --可能是上述情况的组合。                                                                                                               
  48.                                                                                                                                      
  49. --31637次也许是好的,也许是坏的,仅仅是一个值而已。                                                                                    
  50. --这取决于                                                                                                                             
  51. --数据库启动了多久?                                                                                                                   
  52. --这个值占总提取数据百分比的多少行?                                                                                                   
  53. --假如它占据了你从表上fetch的0.001%,则无关紧要。                                                                                      
  54.                                                                                                                                      
  55. --因此,比较table fetch continued row与总提取的记录数是有必要的                                                                        
  56.                                                                                                                                     
  57. SELECT name,value FROM v$sysstat WHERE name like '%table%';                                                                         
  58.                                                                                                                                     
  59. NAME                                                                  VALUE                                                         
  60. ---------------------------------------------------------------- ----------                                                          
  61. table scans (short tables)                                           124338                                                         
  62. table scans (long tables)                                              1485                                                         
  63. table scans (rowid ranges)                                                0                                                         
  64. table scans (cache partitions)                                           10                                                         
  65. table scans (direct read)                                                 0                                                         
  66. table scan rows gotten                                             20164484                                                         
  67. table scan blocks gotten                                            1658293                                                         
  68. table fetch by rowid                                                1883112                                                         
  69. table fetch continued row                                             31637                                                         
  70. table lookup prefetch client count                                        0

  九、一个表上链接的行是多少? 

  1. --通过对表analyze后(未analyze是空值),可以从数据字典user_tales获得链接的记录数。       
  2. ANALYZE TABLE row_mig_chain_demo COMPUTE STATISTICS;                               
  3.                                                                                     
  4. SELECT chain_cnt,                                                                  
  5.        round(chain_cnt/num_rows*100,2) pct_chained,                                
  6.        avg_row_len, pct_free , pct_used                                            
  7.   FROM user_tables                                                                 
  8. WHERE table_name = 'ROW_MIG_CHAIN_DEMO';                                           
  9.                                                                                    
  10.  CHAIN_CNT PCT_CHAINED AVG_ROW_LEN   PCT_FREE   PCT_USED                           
  11. ---------- ----------- ----------- ---------- ----------                            
  12.          3         100        3691         10         40                           
  13.                                                                                     
  14. --PCT_CHAINED 为100%,表明所有的行都是链接的或迁移的。

  十、列出链接行

  当使用analyze table中的list chained rows子句能够列出一个表上的链接行。该命令的结果是将所有的链接上存储到一个由list chained rows子句显示指定的表中。 这些结构有助于决定是否将来有足够的空间实现行更新。

  创建CHAINED_ROWS 表

  创建一个用于存储analyze ... list chained rows命令结果的表,可以执行位于$ORACLE_HOME/rdbms/admin目录下的UTLCHAIN.SQL或UTLCHN1.SQL 脚本。

  这个脚本会在当前schema下创建一个名为chained_rows的表

    create table CHAINED_ROWS (
      owner_name         varchar2(30),
      table_name         varchar2(30),
      cluster_name       varchar2(30),
      partition_name     varchar2(30),
      subpartition_name  varchar2(30),
      head_rowid         rowid,
      analyze_timestamp  date
    );

  当chained_rows表创建后,可以使用analyze table命令来指向该表作为输出。

65/6<123456>
2023测试行业从业人员调查问卷已开启,千元大奖正在等你~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号