10-15 跟踪SQL会话

问题:
    你想要开启SQL会话跟踪来诊断性能问题。
方法:
    有多种方法可以跟踪会话,但是Oracle推荐使用DBMS_MONITOR包来获取SQL跟踪工具。为了跟踪某个会话,首先要用下面的命令确认会话,假设你知道(数据库)用户名或会话的SID:
SQL> select sid, serial#, username from v$session;
  一旦你从上面的查询获得会话SID和串号serial#,就可以调用dbms_monitor包中的session_trace_enable过程,例如:
SQL> exec dbms_monitor.session_trace_enable(session_id=>138,serial_num=>242,waits=>true,binds=>false);
PL/SQL procedure successfully completed.
SQL>

注意:  SQL跟踪确实会增加数据库的开销,在生产环境下你需要慎重选择,因为跟踪可能会写完磁盘或对CPU使用产生不利影响

    在本例中,我们也选择了wait信息,虽然是可选的。一旦执行此命令,就可以让用户执行那些你在开发或测试环境测试过的SQL语句。在生产环境中,等待足够长的时间,以确保你已经捕获跟踪关闭前执行的SQL语句。然后调用session_trace_disable过程禁止跟踪会话,如下所示:
SQL> exec dbms_monitor.session_trace_disable();
PL/SQL procedure successfully completed.
SQL>

    一旦完成跟踪会话活动,你就可以在跟踪目录中获得一个该会话的跟踪文件,然后使用TKPROF应用(或不同的分析程序)产生一个报表。这里我的跟踪文件是有mytrace1后缀,这个值你可以设置实例级参数tracefile_identifier(命令:alter session set tracefile_identifier = 'mytrace1')。
    若要跟踪当前用户会话,请用下面两个命令:
SQL> exec dbms_monitor.session_trace_enable();
SQL> exec dbms_monitor.session_trace_disable();

工作原理:
    跟踪整个会话需要消耗大量的资源,仅当你还没有确定执行不当的SQL语句时才必须这么做。会话跟踪可以收集以下类型的信息:
    会话中运行的每条语句物理读取和逻辑读取,
    每条语句处理的行数,
    库缓存未命中数,
    提交和回滚数,
    每条语句的实际执行计划显示的行操作,
    每条SQL语句的等待事件。

请注意: 你需要DBA角色去执行dbms_monitor包的过程和函数。

    你可以为session_trace_enable过程指定以下参数:
    session_id:会话SID,标识你要跟着的会话,忽略则是当前你自己的会话。
    serial_num:会话序列号。
    waits:默认为false,要捕获等待信息就设置为true。
    binds:默认值为false,要捕获绑定变量信息就设置为true。
    plan_stat:确定行源统计信息(包括执行计划和执行统计信息)被转储的频率。
 
    session_trace_enable过程的所有参数都很明析,除了plan_stat。你可以为该参数设置以下值:
    never:跟踪文件不包含任何有关行源操作的信息。
    first_execution:在语句第一次执行后,行源信息只写一次(与设置为NULL情况一样)。
    all_executions:游标每次执行时,执行计划和执行统计信息要被写入,仅当游标关闭时不写。
    由于语句的执行计划在程序执行过程中可以更改,如果你想捕获该语句所有可能的执行计划,你可以将plan_stat参数设置为all_executions。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27795363/viewspace-745161/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27795363/viewspace-745161/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值