zoukankan      html  css  js  c++  java
  • 物理备库 在统计表空间大小的时候性能异常;

    在生产环境中,相信大对都会对表空间使用情况进行统计,监控。
    然而,在生产环境中,监控我们一台版本为 12.2.0.1 物理备库时,性能极着。主要是在进行单块读。
     
    通过v$active_session_history  定位到具体性能后,然后与性能正常的执行计划进行对比。发现性能慢是因为对  X$KTFBUE 进行全表扫描, 性能快的却是走的索引。
    SQL 信息如下:
    set linesize 1000
    set pagesize 1000
    col TABLESPACE_NAME for a25
    col autoextensible for a13
    col SUM_SPACE(M) for a13
    col SUM_BLOCKS for a20
    col USED_SPACE(M) for a13
    col USED_RATE(%) for a13
    col FREE_SPACE(M) for a13
    SELECT D.TABLESPACE_NAME,
           autoextensible,
           SPACE || 'M' "SUM_SPACE(M)",  
                 to_char(BLOCKS) "SUM_BLOCKS",  
           SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)",  
           ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%'
              "USED_RATE(%)",
           FREE_SPACE || 'M' "FREE_SPACE(M)"  
      FROM ( SELECT TABLESPACE_NAME,
                    ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,  
                     SUM (BLOCKS) BLOCKS,
                     AUTOEXTENSIBLE   
                FROM DBA_DATA_FILES  
            GROUP BY TABLESPACE_NAME ,autoextensible) D,  
           ( SELECT TABLESPACE_NAME,
                     ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE  
                FROM DBA_FREE_SPACE  
           GROUP BY TABLESPACE_NAME) F  
     WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)  
    

      

     
     
    正确的执行计划:

    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 395386842
     
    ----------------------------------------------------------------------------------------------------
    | Id  | Operation                       | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
    ----------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT                |                  |     5 |   380 |    28  (11)| 00:00:01 |
    |*  1 |  HASH JOIN OUTER                |                  |     5 |   380 |    28  (11)| 00:00:01 |
    |   2 |   VIEW                          |                  |     5 |   230 |    10  (10)| 00:00:01 |
    |   3 |    HASH GROUP BY                |                  |     5 |   185 |    10  (10)| 00:00:01 |
    |   4 |     VIEW                        | DBA_DATA_FILES   |     5 |   185 |     9   (0)| 00:00:01 |
    |   5 |      UNION-ALL                  |                  |       |       |            |          |
    |   6 |       NESTED LOOPS              |                  |     1 |    89 |     3   (0)| 00:00:01 |
    |   7 |        NESTED LOOPS             |                  |     1 |    74 |     2   (0)| 00:00:01 |
    |   8 |         NESTED LOOPS            |                  |     1 |    23 |     2   (0)| 00:00:01 |
    |*  9 |          TABLE ACCESS FULL      | FILE$            |     1 |    20 |     2   (0)| 00:00:01 |
    |* 10 |          FIXED TABLE FIXED INDEX| X$KCCFE (ind:1)  |     1 |     3 |     0   (0)| 00:00:01 |
    |* 11 |         FIXED TABLE FULL        | X$KCCFN          |     1 |    51 |     0   (0)| 00:00:01 |
    |  12 |        TABLE ACCESS CLUSTER     | TS$              |     1 |    15 |     1   (0)| 00:00:01 |
    |* 13 |         INDEX UNIQUE SCAN       | I_TS#            |     1 |       |     0   (0)| 00:00:01 |
    |  14 |       NESTED LOOPS              |                  |     4 |   380 |     6   (0)| 00:00:01 |
    |  15 |        NESTED LOOPS             |                  |     4 |   320 |     2   (0)| 00:00:01 |
    |  16 |         NESTED LOOPS            |                  |     4 |   308 |     2   (0)| 00:00:01 |
    |  17 |          NESTED LOOPS           |                  |     4 |   240 |     2   (0)| 00:00:01 |
    |* 18 |           TABLE ACCESS FULL     | FILE$            |     5 |    45 |     2   (0)| 00:00:01 |
    |* 19 |           FIXED TABLE FULL      | X$KCCFN          |     1 |    51 |     0   (0)| 00:00:01 |
    |* 20 |          FIXED TABLE FIXED INDEX| X$KTFBHC (ind:1) |     1 |    17 |     0   (0)| 00:00:01 |
    |* 21 |         FIXED TABLE FIXED INDEX | X$KCCFE (ind:1)  |     1 |     3 |     0   (0)| 00:00:01 |
    |  22 |        TABLE ACCESS CLUSTER     | TS$              |     1 |    15 |     1   (0)| 00:00:01 |
    |* 23 |         INDEX UNIQUE SCAN       | I_TS#            |     1 |       |     0   (0)| 00:00:01 |
    |  24 |   VIEW                          |                  |     6 |   180 |    18  (12)| 00:00:01 |
    |  25 |    HASH GROUP BY                |                  |     6 |   126 |    18  (12)| 00:00:01 |
    |  26 |     VIEW                        | DBA_FREE_SPACE   |    62 |  1302 |    17   (6)| 00:00:01 |
    |  27 |      UNION-ALL                  |                  |       |       |            |          |
    |  28 |       NESTED LOOPS              |                  |     1 |    64 |     5   (0)| 00:00:01 |
    |  29 |        NESTED LOOPS             |                  |     1 |    45 |     4   (0)| 00:00:01 |
    |  30 |         TABLE ACCESS FULL       | FET$             |     1 |    39 |     4   (0)| 00:00:01 |
    |* 31 |         INDEX UNIQUE SCAN       | I_FILE2          |     1 |     6 |     0   (0)| 00:00:01 |
    |* 32 |        TABLE ACCESS CLUSTER     | TS$              |     1 |    19 |     1   (0)| 00:00:01 |
    |  33 |       NESTED LOOPS              |                  |    59 |  2419 |     4   (0)| 00:00:01 |
    |  34 |        NESTED LOOPS             |                  |    59 |  2065 |     4   (0)| 00:00:01 |
    |* 35 |         TABLE ACCESS FULL       | TS$              |     5 |   125 |     4   (0)| 00:00:01 |
    |* 36 |         FIXED TABLE FIXED INDEX | X$KTFBFE (ind:1) |    11 |   110 |     0   (0)| 00:00:01 |
    |* 37 |        INDEX UNIQUE SCAN        | I_FILE2          |     1 |     6 |     0   (0)| 00:00:01 |
    |  38 |       NESTED LOOPS              |                  |     1 |    88 |     4  (25)| 00:00:01 |
    |  39 |        NESTED LOOPS             |                  |     1 |    82 |     4  (25)| 00:00:01 |
    |  40 |         NESTED LOOPS            |                  |     1 |    64 |     3   (0)| 00:00:01 |
    |  41 |          TABLE ACCESS FULL      | RECYCLEBIN$      |     1 |    39 |     2   (0)| 00:00:01 |
    |* 42 |          TABLE ACCESS CLUSTER   | TS$              |     1 |    25 |     1   (0)| 00:00:01 |
    |* 43 |           INDEX UNIQUE SCAN     | I_TS#            |     1 |       |     0   (0)| 00:00:01 |
    |* 44 |         FIXED TABLE FIXED INDEX | X$KTFBUE (ind:1) |     1 |    18 |     1 (100)| 00:00:01 |      #正常的执行计划是走的  FIXED TABLE FIXED INDEX 
    |* 45 |        INDEX UNIQUE SCAN        | I_FILE2          |     1 |     6 |     0   (0)| 00:00:01 |      #而性能慢的 是走的 FIXED TABLE  FULL
    |  46 |       NESTED LOOPS              |                  |     1 |   116 |     4   (0)| 00:00:01 |
    |  47 |        NESTED LOOPS             |                  |     1 |    97 |     3   (0)| 00:00:01 |
    |  48 |         MERGE JOIN CARTESIAN    |                  |     1 |    45 |     3   (0)| 00:00:01 |
    |  49 |          TABLE ACCESS FULL      | RECYCLEBIN$      |     1 |    39 |     2   (0)| 00:00:01 |
    |  50 |          BUFFER SORT            |                  |     5 |    30 |     1   (0)| 00:00:01 |
    |  51 |           INDEX FULL SCAN       | I_FILE2          |     5 |    30 |     1   (0)| 00:00:01 |
    |  52 |         TABLE ACCESS CLUSTER    | UET$             |     1 |    52 |     0   (0)| 00:00:01 |
    |* 53 |          INDEX UNIQUE SCAN      | I_FILE#_BLOCK#   |     1 |       |     0   (0)| 00:00:01 |
    |* 54 |        TABLE ACCESS CLUSTER     | TS$              |     1 |    19 |     1   (0)| 00:00:01 |
    |* 55 |         INDEX UNIQUE SCAN       | I_TS#            |     1 |       |     0   (0)| 00:00:01 |
    ----------------------------------------------------------------------------------------------------
    

      

     
    坏的执行计划:
     
     
    查询了相关表信息:  

     
    SYS@PROD1>select TABLE_NAME ,INDEX_NUMBER,COLUMN_NAME,COLUMN_POSITION from V$INDEXED_FIXED_COLUMN where TABLE_NAME like 'X$KTFBUE%';
     
    TABLE_NAME INDEX_NUMBER COLUMN_NAME COLUMN_POSITION
    ------------------------------ ------------ ------------------------------ ---------------
    X$KTFBUE 1 KTFBUESEGTSN 0
    X$KTFBUE 1 KTFBUESEGFNO 1
    X$KTFBUE 1 KTFBUESEGBNO 2
     
    SYS@PROD1>select NAME,OBJECT_ID,TYPE,TABLE_NUM from V$FIXED_TABLE where name like 'X$KTFBUE%';
     
    NAME OBJECT_ID TYPE TABLE_NUM
    ------------------------------ ---------- ----- ----------
    X$KTFBUE 4294951517 TABLE 476
    

      

    注意:由于是FIXED OBJECT (固定对象),在dba_objects,dba_indexes 都查不到相关信息。 
     
    解决思路:  1. 清理回收站 
                        2. 检查是否有类似 bug
                        3. 通过 hint  方式,强制让执行计划走 索引(测试,)
                        4. 通过 收集统计信息 ,让其自行改变执行计划走索引
                         
     
    解决:  1. 清理回收站    
                      说明:由于是物理备库,所在以主库上进行清理 回收站后 purge dba_recyclebin ,  select count(*) from dba_recyclebin ; 
                        a.  性能果然有所提升 ,但是仍然是走的全表扫描。
                        b.  当回收站 又有对象时,性能又马上降下来。
                                注意:1. 模拟回收站时,  需要以普通用户进行drop,  sys 用户drop 的对象不进入回收站 ; 
                                            2.  系统表空间不放入回收站,Flashback Drop 用于非系统表空间和本地管理的表空间
                      总结: 回收站会影响 DBA_FREE_SPACE 视图的统计 , 同时由于执行计划没有变,且问题反复出现,所有根本问题没有解决。
     
                 2. 检查是否有类似 bug
                     说明,在MOS 上确实是有类似bug ,X$KTFBUE   FULL  SCAN   的bug,   但是该类BUG 主要是针对12.1 及以前的版本。 
     
                 3.准备手动创建 DBA_FREE_SPACE2 视图,以强制X$KTFBUE  走索引 ,目前通过测试,还没有达到效果。
            
                 4. 尝试收集统计信息。 
                    说明,由于是物理备库,在收集的时候就报错了,所以在主库上收集
                   a. 由于是fixed 表, 所以我首先执行的是    exec dbms_stats.GATHER_FIXED_OBJECTS_STATS()  ;    
                           但是,执先结束,测试,仍然没有走索引。 
                   b. 单独指定该表收集, exec dbms_stats.gather_table_stats('SYS','X$KTFBUE')   ;            
                           在次执行的时候 ,主备库都已走索引。(原来主库统计容量的时候也是走的全表)
     
                         
                     总结: 1. fixed 类型的性能问题, 尽量通过收集相应统计信息来优化。    
                                 2. 统计信息 记录系统表空间里, 相当于 物理备库 也会同步主库的 统计信息
     
  • 相关阅读:
    窗体句柄总是0
    该函数设置由不同线程产生的窗口的显示状态。
    zip压缩解压缩 项目icsharpcode-SharpZipLib-e012155
    VS(Microsoft Visual Studio2010)工具打开项目所需的应用程序,出现未安装(.csproj)的应用程序的解决办法
    Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全
    iPhone 6出现后,如何将一份设计稿支持多个尺寸?
    iPhone/Mac Objective-C内存管理教程和原理剖析
    What does the “__block” keyword mean?
    UIView frame, bounds and center
    ARC __bridge modifiers demystified
  • 原文地址:https://www.cnblogs.com/cqdba/p/11413423.html
Copyright © 2011-2022 走看看