| |
ORACLE学习笔记--性能优化 |
出处:数据库论坛 |
|
| [ 2005-07-19 10:03:15
] |
作者:unknow
|
责任编辑:moningfeng |
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 ------------- 0 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:包括绑定变量与等待事件
|