问题:
你想要开启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。
你想要开启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/