• 博客访问: 850612
  • 博文数量: 209
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-08 15:04
个人简介

暂无介绍

文章分类

全部博文(209)

文章存档

2015年(5)

2014年(23)

2013年(8)

2012年(8)

2011年(38)

2010年(27)

2009年(100)

分类: Linux操作系统

2010-08-04 13:25:22

ORACLE学习笔记--性能优化(一)

1. 查询正在执行语句的执行计划(也就是实际语句执行计划)

select * from v$sql_plan where hash_value = (select sql_hash_value from v$session where sid = 1111);

其中id和parent_id表示了执行数的结构,数值最大的为最先执行

比如

ID  PARENT_ID   

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

1 0

2 1

3 2

4 3

5 4

6 3  

则执行计划树为

              0

              1

              2

              3

           6     4 

                  5

2.如何设置自动跟踪

用system登录

执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建计划表

执行$ORACLE_HOME/sqlplus/admin/plustrce.sql创建plustrace角色

如果想计划表让每个用户都能使用,则

SQL>create public synonym plan_table for plan_table;

SQL> grant all on plan_table to public;

如果想让自动跟踪的角色让每个用户都能使用,则

SQL> grant plustrace to public;

通过如下语句开启/停止跟踪

SET AUTOTRACE ON |OFF | ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN

3.如何跟踪自己的会话或者是别人的会话

跟踪自己的会话很简单

Alter session set sql_trace true|false

Or

Exec dbms_session.set_sql_trace(TRUE);

如果跟踪别人的会话,需要调用一个包

exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false)

跟踪的信息在user_dump_dest 目录下可以找到或通过如下脚本获得文件名称(适用于Win环境,如果是unix需要做一定修改)

SELECT p1.value||'\'||p2.value||'_ora_'||p.spid||'.ora' filename

FROM

v$process p,

v$session s,

v$parameter p1,

v$parameter p2

WHERE p1.name = 'user_dump_dest'

AND p2.name = 'db_name'

AND p.addr = s.paddr

AND s.audsid = USERENV ('SESSIONID')

最后,可以通过Tkprof来解析跟踪文件,如

Tkprof 原文件 目标文件 sys=n

4.怎么设置整个数据库系统跟踪

其实文档上的alter system set sql_trace=true是不成功的,但是可以通过设置事件来完成这个工作,作用相等

alter system set events

'10046 trace name context forever,level 1';

如果关闭跟踪,可以用如下语句

alter system set events

'10046 trace name context off';

其中的level 1与上面的8都是跟踪级别

level 1:跟踪SQL语句,等于sql_trace=true

level 4:包括变量的详细信息

level 8:包括等待事件

level 12:包括绑定变量与等待事件

阅读(1337) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册