Welcome 微信登录

首页 / 数据库 / MySQL / Oracle性能调整工具总结

性能调整工具explain plan,autotrace,tkprof,执行计划和静态统计信息的解读1、 执行计划执行计划的设定conn sys/pwd@tiwen` as sysdba; CREATE USER TOOL  IDENTIFIED BY tool  DEFAULT TABLESPACE EXAMPLE  TEMPORARY TABLESPACE TEMP  PROFILE DEFAULT  ACCOUNT UNLOCK;  -- 2 Rolesfor TOOL   GRANT RESOURCE TO TOOL;  GRANT CONNECT TO TOOL;  ALTER USER TOOL DEFAULT ROLE NONE;  -- 3 SystemPrivileges for TOOL   GRANT CREATE SESSION TO TOOL;  GRANT CREATE TABLE TO TOOL;  GRANT UNLIMITED TABLESPACE TO TOOL; CREATE GLOBAL TEMPORARY TABLE tool.PLAN_TABLE(  STATEMENT_ID       VARCHAR2(30 BYTE),  PLAN_ID            NUMBER,  TIMESTAMP          DATE,  REMARKS            VARCHAR2(4000 BYTE),  OPERATION          VARCHAR2(30 BYTE),  OPTIONS            VARCHAR2(255 BYTE),  OBJECT_NODE        VARCHAR2(128 BYTE),  OBJECT_OWNER       VARCHAR2(30 BYTE),  OBJECT_NAME        VARCHAR2(30 BYTE),  OBJECT_ALIAS       VARCHAR2(65 BYTE),  OBJECT_INSTANCE    INTEGER,  OBJECT_TYPE        VARCHAR2(30 BYTE),  OPTIMIZER          VARCHAR2(255 BYTE),  SEARCH_COLUMNS     NUMBER,  ID                 INTEGER,  PARENT_ID          INTEGER,  DEPTH              INTEGER,  POSITION           INTEGER,  COST               INTEGER,  CARDINALITY        INTEGER,  BYTES              INTEGER,  OTHER_TAG          VARCHAR2(255 BYTE),  PARTITION_START    VARCHAR2(255 BYTE),  PARTITION_STOP     VARCHAR2(255 BYTE),  PARTITION_ID       INTEGER,  OTHER              LONG,  OTHER_XML          CLOB,  DISTRIBUTION       VARCHAR2(30 BYTE),  CPU_COST           INTEGER,  IO_COST            INTEGER,  TEMP_SPACE         INTEGER,  ACCESS_PREDICATES  VARCHAR2(4000 BYTE),  FILTER_PREDICATES  VARCHAR2(4000 BYTE),  PROJECTION         VARCHAR2(4000 BYTE),  TIME               INTEGER,  QBLOCK_NAME        VARCHAR2(30 BYTE))ON COMMIT PRESERVE ROWS; grant all on TOOL.PLAN_TABLE to public; CREATE PUBLIC SYNONYM PLAN_TABLE FOR TOOL.PLAN_TABLE;  使用方法:truncate table PLAN_TABL;explain plan select * from emp;select plan_table_output from table(dbms_xplan.display("plan_table",null,"serial")); 演示:conn scott/tigerSQL> explain plan for select * from dept where deptno=10;ExplainedSQL> select plan_table_output fromtable(dbms_xplan.display("plan_table",null,"serial")); PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------Plan hash value: 3383998547--------------------------------------------------------------------------| Id  |Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |--------------------------------------------------------------------------|   0 | SELECTSTATEMENT  |      |    1 |    16 |     4  (0)| 00:00:01 ||*  1 |  TABLE ACCESS FULL| DEPT |     1 |   16 |     4   (0)| 00:00:01|--------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 -filter("DEPTNO"=10) 13 rows selected 执行计划解读:--估算表表v$sql_plancost概念cardinality   查询路径—估算树create table eas select * from emp create table dasselect * from dept  Explain plan forselectename,dname from d,e where e.deptno=d.deptno select * from table(dbms_xplan.display());  Plan hash value: 1127375450 ---------------------------------------------------------------------------| Id | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |---------------------------------------------------------------------------|   0 | SELECT STATEMENT   |      |   15 |   630 |    7  (15)| 00:00:01 ||*  1 |  HASH JOIN         |     |    15 |   630 |     7  (15)| 00:00:01 ||   2 |   TABLE ACCESS FULL| D    |    4 |    88 |    3   (0)| 00:00:01 ||   3 |   TABLE ACCESS FULL| E    |    15 |   300 |     3   (0)| 00:00:01 |--------------------------------------------------------------------------- Predicate Information (identified byoperation id):---------------------------------------------------    1 - access("E"."DEPTNO"="D"."DEPTNO") Note-----   - dynamic sampling used for this statement Explain plan forselect ename,dnamefrom d, (select ename,deptno from e where rownum<2) e where e.deptno=d.deptno  select * from table(dbms_xplan.display()); Plan hash value: 1791846393 -----------------------------------------------------------------------------| Id | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |-----------------------------------------------------------------------------|   0 | SELECT STATEMENT     |      |    1 |    42 |    5   (0)| 00:00:01 ||   1 |  NESTEDLOOPS        |      |    1 |   42 |     5  (0)| 00:00:01 ||   2 |   VIEW               |      |    1 |    20 |    2   (0)| 00:00:01 ||*  3 |    COUNTSTOPKEY     |      |      |       |            |          ||   4 |     TABLE ACCESS FULL| E    |    15 |   300 |     2   (0)| 00:00:01 ||*  5 |   TABLE ACCESS FULL  | D    |     1 |    22 |     3   (0)| 00:00:01 |----------------------------------------------------------------------------- Predicate Information (identified byoperation id):---------------------------------------------------    3 - filter(ROWNUM<2)   5 -filter("E"."DEPTNO"="D"."DEPTNO") Note-----   - dynamic sampling used for this statement  驱动表概念估算树 从左到右 从下到上 

autotrace

Oracle_homesqlplusadmin conn sys/pwd@tiwen as sysdba;drop role plustrace;create role plustrace; grant select on v_$sesstat to plustrace;grant select on v_$statname to plustrace;grant select on v_$mystat to plustrace;grant plustrace to dba with admin option;grant plustrace  to public; grant select on v_$sesstat to public;grant select on v_$statname to public;grant select on v_$mystat to public;grant plustrace to dba with admin option;grant plustrace  to public;  grant alter session to public; 使用命令set autotrace onset autotrace offset autotrace on explainset autotrace on statisticsset autotrace traceonly  autotrace输出内容解释recursive calls:执行语句时、调用的oracle内部语句(如分析所用的sql)和其他语句(如触发器)。测试举例:举例1conn scott/tiger@tiwenset autotrace onalter system flush shared_poolset autotrace onselect * from empselect * from emp  举例2create table exchage_table(bill_code   number(10),exchage_rate  number(16,3))
BILL_CODEEXCHAGE_RATE
1004.678
2005.235
3005.430
4002.654
  create or replace functiontoday_exchage(p_code in number) return number is v_exange number(16,3);beginselectexchage_rate into v_exange from exchage_tablewherebill_code=p_code;returnv_exange;end; create table affair( trans_id  number(10), bill_code number(10), balance   number(16,2)) 
TRANS_IDBILL_CODEBALANCE
10001001234.00
20002004324.32
300030065464.23
 较好的写法为select  trans_id, (select exchage_rate fromexchage_table wherebill_code=affair.bill_code )*balance from affair  举例3drop table tppp purge   create table tppp(p integer) create or replace trigger t_trigger  before insert on tppp   for each rowdeclare  -- local variables herebeginif:new.p>5 thenraise_application_error(-20001,"bbbbbbbb");end if;  end t_trigger; 统计信息----------------------------------------------------------         29 recursive calls         19  db block gets         54 consistent gets          0  physical reads       1172  redo size        676  bytes sent via SQL*Net to client        627  bytes received via SQL*Net from client          3  SQL*Net roundtrips to/from client          1  sorts (memory)          0 sorts (disk)          9  rows processed 在一次运行 统计信息---------------------------------------------------------         29  recursive calls          0  db block gets        117  consistent gets          1  physical reads          0  redo size        483  bytes sent via SQL*Net to client        416 bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          9  rows processeddrop  trigger t_trigger; 统计信息----------------------------------------------------------          0 recursive calls          0  db block gets        108  consistent gets          0  physical reads          0  redo size        483  bytes sent via SQL*Net to client        416  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          9  rows processed 解决方法为1、 编写高效的trigger2、 用过程代替trigger
  • 1
  • 2
  • 下一页
Oracle 关键字作字段MySQL or条件可以使用索引而避免全表相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数