zoukankan      html  css  js  c++  java
  • oracle性能优化

    系统性能

    IO忙

    IO热点文件和SQL分析

    判断热点数据文件

    SQL> @?/rdbms/admin/awrrpt.sql

    或者

    column name format a40;

    set lines 500;

    select name, sum(s.PHYRDS), sum(PHYWRTS),sum(READTIM),sum(writetim),

    sum((phyrds+phywrts))/(sum(readtim+writetim)) avgio from v$filestat s, v$datafile f

    where s.file#=f.file#

    group by name

    order by 6;

    1. 移动数据文件,调整热点数据文件到空闲磁盘上

    SQL> startup mount

    SQL> alter database rename ‘源文件’ to ‘目的文件’

    $ mv  ‘源文件’ ‘目的文件’

    SQL>alter database open

    查看各进程的物理IO情况

    SELECT se.sid,

           se.serial#,

           pr.SPID,

           se.username,

           se.status,

           se.program,

           se.MODULE,

           st.event,

           st.p1text,

           st.p1,

           st.p2,

           st.p3,

           st.STATE,

           st.SECONDS_IN_WAIT,

           si.physical_reads,

           si.block_changes

      FROM v$session se,

           v$session_wait st,

           v$sess_io si,

           v$process pr

     WHERE st.sid=se.sid AND st.sid=si.sid

       AND se.PADDR=pr.ADDR AND se.sid>6

       AND st.wait_time=0 AND st.event NOT LIKE '%SQL%'

     ORDER BY physical_reads

    查找IO高的sql;

    select p.spid,s.sid,s.machine,s.program,q.disk_reads,q.sql_text

    from v$process p,v$session s,v$sql q

    where p.addr=s.paddr and s.sql_id=q.sql_id

    order by 5;

    8799                612 cqcu-zyite-col109

    perl@cqcu-zyite-col109 (TNS V1-V3)                  1683932

    SPID                SID MACHINE

    ------------ ---------- ----------------------------------------------------------------

    PROGRAM                                          DISK_READS

    ------------------------------------------------ ----------

    SQL_TEXT

    ----------------------------------------------------------------------------------------------------

    DELETE resmonicurinfo rc     WHERE EXISTS (SELECT 1 FROM rescurinfo ri           WHERE rc.probeid IN

     ('PRS00008')         AND rc.probeid = ri.probeid         AND rc.resid = ri.resid         AND rc.dat

    aitemid = ri.dataitemid)

    8733                483 cqcu-zyite-col113

    perl@cqcu-zyite-col113 (TNS V1-V3)                  1998034

    DELETE resmonicurinfo rc     WHERE EXISTS (SELECT 1 FROM rescurinfo ri           WHERE rc.probeid IN

    SPID                SID MACHINE

    ------------ ---------- ----------------------------------------------------------------

    PROGRAM                                          DISK_READS

    ------------------------------------------------ ----------

    SQL_TEXT

    ----------------------------------------------------------------------------------------------------

     ('PRS00012')         AND rc.probeid = ri.probeid         AND rc.resid = ri.resid         AND rc.dat

    aitemid = ri.dataitemid)

    b)      delete from devicemacvlan where deviceid =:p1

    c) 31448               113 cqcu-zyite-col113                                                perl@cqcu-zyite-col113 (TNS V1-V3)    11009354

    select d.DeviceID,        d.PPDescr,               d.UpConSpeed,        d.DownConSpeed,        d.UpCfgSpeed,        d.DownCfgSpeed,   d.UpMaxSpeed,        d.DownMaxSpeed,        d.UpSNR,        d.DownSNR,        d.UpAttenuation,        d.DownAttenuation,        p.pptype   from DSLAMPortParaCur d, ppinfo p  where d.deviceid = p.deviceid(+) and d.ppdescr = p.ppdescr(+)

    CPU负载过高

    1. 查找cpu过高的进程号;

    ps -e -o pid,pcpu,user,args|sort -n +1"

    1. 查看进程号对应的sql语句

    select p.spid,s.status,substr(s.machine,1,10) machine,substr(s.program,1,10) program,substr(q.sql_text,1,70) sql from v$session s,v$process p,v$sqlarea q where s.paddr=p.addr and s.sql_id=q.sql_id(+)

    1.  

                           

    案例:数据库CPU过高

    3540 , 84.25% , ACTIVE , fj-zyite-a ,perl@fj-zy , SELECT adeviceid, p1.portdescr, c.transcircode       FROM circuit c, p 

    28380 , 83.24% , ACTIVE , nmscol1 ,perl@nmsco , MERGE INTO RESMONICURINFO A          USING (SELECT RESID, RESPARA, DAT 

    15713 , 83.18% , ACTIVE , nmscol2.qz ,perl@nmsco , MERGE INTO RESMONICURINFO A          USING (SELECT RESID, RESPARA, DAT 

    5880 , 49.81% , ACTIVE , fj-zyite-a ,perl@fj-zy , select p.spid,s.status,substr(s.machine,1,10) machine,substr(s.program 

    112 , 34.73% , INACTIVE , fj-zyite-a , , Select failureId,max(g.endLevel) from failurelist,( Select FailureUpgr 

    100 , 31.54% , ACTIVE , nmscol2.fz ,sqlldr@nms , INSERT INTO RESCURINFO   (PROBEID,RESID,RESPARA,DATAITEMID,VALUE,RECOR 

    21706 , 19.13% , ACTIVE , nmscol1.ly , , select distinct aa.CircuitID, aa.FluxTime, aa.InAvgVec, aa.OutAvgVec,c 

    12672 , 14.34% , ACTIVE , nmscol2.fz ,perl@nmsco , select to_char(checktime,'yyyymmddhh24miss') from rcheckreschecklog    

    28114 , 13.75% , ACTIVE , nmscol1.pt ,perl@nmsco , select to_char(checktime,'yyyymmddhh24miss') from rcheckreschecklog  

    SQL问题诊断和优化

    查询计划分析

    :右上优先原则

    SQL> set autotrace traceonly;

    SQL> DELETE resmonicurinfo rc     WHERE EXISTS (SELECT 1 FROM rescurinfo ri           WHERE rc.probeid IN  ('PRS00012')         AND rc.probeid = ri.probeid         AND rc.resid = ri.resid         AND   rc.dataitemid = ri.dataitemid);

    10024 rows deleted.

    Execution Plan

    ----------------------------------------------------------

    | Id  | Operation                | Name           | Rows  | Bytes | Cost (%CPU)|

     Pstart| Pstop |

    --------------------------------------------------------------------------------

    ----------------

    |   0 | DELETE STATEMENT         |                |     1 |    31 |  1504K  (1)|

           |       |

    |   1 |  DELETE                  | RESMONICURINFO |       |       |            |

           |       |

    |*  2 |   FILTER                 |                |       |       |            |

           |       |

    |   3 |    TABLE ACCESS FULL     | RESMONICURINFO | 95404 |  2888K|   750K  (1)|

           |       |

    |*  4 |    FILTER                |                |       |       |            |

           |       |

    |   5 |     PARTITION LIST SINGLE|                |     1 |    34 |     8   (0)|

       KEY |   KEY |

    |*  6 |      TABLE ACCESS FULL   | RESCURINFO     |     1 |    34 |     8   (0)|

       KEY |   KEY |

    --------------------------------------------------------------------------------

    ----------------

    Predicate Information (identified by operation id):

    ---------------------------------------------------

       2 - filter( EXISTS (SELECT 0 FROM "RESCURINFO" "RI" WHERE :B1='PRS00012' AND

                  "RI"."DATAITEMID"=:B2 AND "RI"."RESID"=:B3))

       4 - filter(:B1='PRS00012')

       6 - filter("RI"."DATAITEMID"=:B1 AND "RI"."RESID"=:B2)

    Note

    -----

       - 'PLAN_TABLE' is old version

    Statistics

    ----------------------------------------------------------

              1  recursive calls

         101751  db block gets

        3984004  consistent gets

         670813  physical reads

        9593840  redo size

            667  bytes sent via SQL*Net to client

            766  bytes received via SQL*Net from client

              4  SQL*Net roundtrips to/from client

              1  sorts (memory)

              0  sorts (disk)

          10024  rows processed

    查看索引

    select u.index_name,index_type,column_name

    from user_indexes i,user_ind_columns u

    where i.index_name = u.index_name and i.table_name='RESCURINFO';

    查看对象类型,

    是否分区表

    select object_type from user_objects where object_name='RESCURINFO';

    优化方法:

    创建索引

    大表创建索引,资源忙?

    创建分区索引

    create index ind_rescurinfo_resid on rescurinfo (resid)  tablespace indexcfg online local nologging;

    创建非分区索引

    create index ind_devicemacvlan_deviceid on devicemacvlan (deviceid) tablespace indexlist online  nologging;

    create index ind_RESMONICURINFO_RESPARADATA on resmonicurinfo (resid,respara,dataitemid) tablespace indexlist online  nologging;

    清空failurelist

    在线大表创建索引可选参数:

    parallel 4

    sort_area_size

    muti_block_read_count

    表分析

    Analyze table tablename

    附录:

    SQLPLUS设置:

    define editor=vi

    set serveroutput on size 1000000

    set trimspool on

    set long 5000

    set linesize 100

    set pagesize 9999

    column plan_plus_exp format a80;

    查询计划设置

    SQL> alter user system identified by oracle  ;

    用户已更改。

    SQL> conn system/oracle

    SQL> @?/rdbms/admin/utlxplan.sql

    SQL> CREATE public synonym plan_table for plan_table;

    SQL> GRANT ALL ON PLAN_TABLE TO PUBLIC;

    SQL> conn / as sysdba

    SQL> @?/sqlplus/admin/plustrce.sql

    SQL> GRANT PLUSTRACE TO PUBLIC

    SET AUTOTRACE OFF|ON|TRACEONLY

    在线性能优化

    SQL> alter system set timed_statistics true scope=both;

    SQL> alter sytem set sql_trace=true;

    SQL> alter system set max_dump_file_size='10M';

      

  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    与众不同 windows phone (15) Media(媒体)之后台播放音频
    与众不同 windows phone (14) Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成
    与众不同 windows phone (10) Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息
    与众不同 windows phone (17) Graphic and Animation(画图和动画)
    与众不同 windows phone (5) Chooser(选择器)
    与众不同 windows phone (26) Contacts and Calendar(联系人和日历)
    与众不同 windows phone (7) Local Database(本地数据库)
    与众不同 windows phone (19) Device(设备)之陀螺仪传感器, Motion API
    与众不同 windows phone (16) Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单“应用程序...”和“共享...”关联, 与 Windows Phone 的图片中心集成
  • 原文地址:https://www.cnblogs.com/itfriend/p/2878193.html
Copyright © 2011-2022 走看看