Chinaunix首页 | 论坛 | 博客
  • 博客访问: 601716
  • 博文数量: 51
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 1737
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-27 13:45
文章分类

全部博文(51)

文章存档

2011年(3)

2009年(19)

2008年(29)

我的朋友

分类: Oracle

2008-04-14 23:01:15

使用autotrace 优化sql语句
1、创建基础表
sqlplus /nolog
SQL> conn /as sysdba
Connected.
SQL> @  $ORACLE_HOME/rdbms/admin/utlxplan
Table created.
建立同义词并授权多个用户访问
SQL> create public synonym plan_table for plan_table;
2、创建plustrace角色
SQL> start $ORACLE_HOME/sqlplus/admin/plustrce;
SQL>
SQL> drop role plustrace;
drop role plustrace
ERROR at line 1:
ORA-01919: role 'PLUSTRACE' does not exist
SQL> create role plustrace;
Role created.
SQL>
SQL> grant select on v_$sesstat to plustrace;
Grant succeeded.
SQL> grant select on v_$statname to plustrace;
Grant succeeded.
SQL> grant select on v_$mystat to plustrace;
Grant succeeded.
SQL> grant plustrace to dba with admin option;
Grant succeeded.
SQL> SQL> set echo off
让所有用户共享plustrce用户
SQL> grant plustrace to public;
Grant succeeded.
完成以上功能就可以使用AUTOTRACE
 autotrace 选项介绍
  set autotrace off          不生成autotrace报告
  set autotrace on explain   autotrace只显示优化器执行路径的报告
  set autotrace on statistics 只显示执行统计信息
  set autotrace on 包含执行计划和统计信息
  set autotrace on traceonly 同set autotrace on 但不显示查询输出
举例:
 SQL>set autotrace on
 SQL>select * from v$database;
 --------------------------------------------------------------------------------
| Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |          |   100 | 80200 |     0   (0)| 00:00:01
|   1 |  MERGE JOIN CARTESIAN|          |   100 | 80200 |     0   (0)| 00:00:01
|*  2 |   FIXED TABLE FULL   | X$KCCDI  |     1 |   693 |     0   (0)| 00:00:01
|   3 |   BUFFER SORT        |          |   100 | 10900 |     0   (0)| 00:00:01
|   4 |    FIXED TABLE FULL  | X$KCCDI2 |   100 | 10900 |     0   (0)| 00:00:01
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - filter("DI"."INST_ID"=USERENV('INSTANCE'))
Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
       4178  bytes sent via SQL*Net to client
        416  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed
用途1、辅助优化SQL语句
用途2、捕获问题的SQL语句
通过 系统命令 vmstat
              top
              ps 等查找到耗用较大的进程
              登陆数据库察看v$session_wait获取等待进程
              select  sid, event, p1, p1text from v$session_wait;
              通过SID获得正在执行的SQL语句
              select sql_text from v$sqltext a
              where a.hash_value=(select sql_hash_value from v$session b where b.sid='&sid' )
              通过设置autotrace 来跟踪sql语句
         
阅读(1459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~