• [ORACLE]oracle 如何解决高水平线问题


    问题:删除表数据不会导致高水位线下降,不会使用查询效率,

    模拟:

    创建表,分析表

    SQL> create table TEST as select * from TESTT1;
    
    Table created.
    
    SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('c##sapr3',tabname =>'TEST',estimate_percent=>100,method_opt=>'FOR ALL COLUMNS SIZE AUTO',degree=>4,cascade=>TRUE);
    
    PL/SQL procedure successfully completed.
    
    SQL> select num_rows,blocks,empty_blocks from dba_tables where table_name='TEST';
    
      NUM_ROWS     BLOCKS EMPTY_BLOCKS
    ---------- ---------- ------------
       1236277       6947            0
    
    SQL> set autotrace traceonly
    
    SQL> select * from TEST;

    1236277 rows selected.


    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1357081020

    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |  1236K|    41M|  2235   (1)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| TEST |  1236K|    41M|  2235   (1)| 00:00:01 |
    --------------------------------------------------------------------------


    Statistics
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
          88809  consistent gets
           6829  physical reads
              0  redo size
       43475416  bytes sent via SQL*Net to client
         906978  bytes received via SQL*Net from client
          82420  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
        1236277  rows processed
    S
    QL> set autotrace off

     删除部分数据:

    SQL> DELETE from TEST where MANDT='000';
    
    1113248 rows deleted.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('c##sapr3',tabname =>'TEST',estimate_percent=>100,method_opt=>'FOR ALL COLUMNS SIZE AUTO',degree=>4,cascade=>TRUE);
    
    PL/SQL procedure successfully completed.
    
    SQL> select num_rows,blocks,empty_blocks from dba_tables where table_name='TEST';
    
      NUM_ROWS     BLOCKS EMPTY_BLOCKS
    ---------- ---------- ------------
        123029       6947            0

    可以看到NUM_ROWS 减少,但BLOCKS仍然和原来的一样是6947

    rows processed 1236277 -->123029
    consistent gets 逻辑读 88809  -->14995
    SQL> set autotrace traceonly
    SQL> select * from TEST;
    
    123029 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1357081020
    
    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |   123K|  4325K|  2225   (1)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| TEST |   123K|  4325K|  2225   (1)| 00:00:01 |
    --------------------------------------------------------------------------
    
    
    Statistics
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
          14995  consistent gets
              0  physical reads
              0  redo size
        3828471  bytes sent via SQL*Net to client
          90591  bytes received via SQL*Net from client
           8203  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
         123029  rows processed
    
    SQL> set autotrace off

    收缩表

    SQL> alter table TEST enable row movement;
    
    Table altered.
    
    SQL> alter table TEST shrink space cascade;
    
    Table altered.
    
    SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('c##sapr3',tabname =>'TEST',estimate_percent=>100,method_opt=>'FOR ALL COLUMNS SIZE AUTO',degree=>4,cascade=>TRUE);
    
    PL/SQL procedure successfully completed.
    
    SQL> select num_rows,blocks,empty_blocks from dba_tables where table_name='TEST';
    
      NUM_ROWS     BLOCKS EMPTY_BLOCKS
    ---------- ---------- ------------
        123029        704            0

    可以看到表中的BLOCKS由6947 减少到704

    继续压缩

    SQL> ALTER TABLE TEST move compress;
    
    Table altered.
    
    SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('c##sapr3',tabname =>'TEST',estimate_percent=>100,method_opt=>'FOR ALL COLUMNS SIZE AUTO',degree=>4,cascade=>TRUE);
    
    PL/SQL procedure successfully completed.
    
    SQL> select num_rows,blocks,empty_blocks from dba_tables where table_name='TEST';
    
      NUM_ROWS     BLOCKS EMPTY_BLOCKS
    ---------- ---------- ------------
        123029        289            0

    可以看到表中的BLOCKS由704减少到289

    再次进行查询

    SQL> set autotrace traceonly
    SQL> select * from TEST;
    
    123029 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1357081020
    
    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |   123K|  4325K|    95   (2)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| TEST |   123K|  4325K|    95   (2)| 00:00:01 |
    --------------------------------------------------------------------------
    
    
    Statistics
    ----------------------------------------------------------
              1  recursive calls
              0  db block gets
           8465  consistent gets
              0  physical reads
              0  redo size
        3841745  bytes sent via SQL*Net to client
          90591  bytes received via SQL*Net from client
           8203  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
         123029  rows processed

    可以看到 consistent 由 14995减少到 8465

  • 相关阅读:
    2019-2020-1学期 20192430 《网络空间安全专业导论》第十二周学习总结
    2019-2020-1学期 20192430 《网络空间安全专业导论》 第十一周学习总结
    20192430屿 20192430屿 2019-2020-1学期 20192430 《网络空间安全专业导论》第十周学习总结
    20192430屿 20192430屿 2019-2020-1学期 20192430 《网络空间安全专业导论》第九周学习总结
    20192430屿 20192430屿 2019-2020-1学期 20192430 《网络空间安全专业导论》第八周学习总结
    20192430屿 20192430屿 2019-2020-1学期 20192430 《网络空间安全专业导论》第七周学习总结
    20192430屿 20192430屿 2019-2020-1学期 20192430 《网络空间安全专业导论》第六周学习总结
    20192430屿 20192430屿 2019-2020-1学期 20192430 《网络空间安全专业导论》第五周学习总结
    20192430屿 20192430屿 2019-2020-1学期 20192430 《网络空间安全专业导论》第四周学习总结
    20192430屿 2019-2020-1学期 20192430 《网络空间安全专业导论》第三周学习总结
  • 原文地址:https://www.cnblogs.com/tingxin/p/12687967.html
Copyright © 2020-2023  润新知