诊断性能问题:使用扩展SQL跟踪数据
接下来要激活跟踪。有几种方法可以采用,包括下面两个:
方法一是使用DBMS_SUPPORT:
CODE:
dbms_support.start_trace_in_session(
![]()
sid => 42,
![]()
serial# => 1215,
![]()
waits => true,
![]()
binds => true)
![]()
/**//* code to be traced executes during this time window */
![]()
dbms_support.stop_trace_in_session(
![]()
sid => 42,
![]()
serial => 1215)
若想激活扩展SQL跟踪,请不要使用名为SET_SQL_TRACE_IN_SESSION的DBMS_SUPPORT过程。该过程不允许在跟踪文件中指定等待和绑定的数据。
第二种方法更为精致,但在Oracle数据库10g之前的版本中并不支持这种方法。 DBMS_MONITOR包的引入解决了许多复杂诊断数据收集问题,这些问题是由连接共享和多线程操作所引起的。你可以在Oracle数据库10g中指定要跟踪的服务、模块或行动,而不指定要跟踪的Oracle数据库会话:
CODE:
dbms_monitor.serv_mod_act_trace_enable(
![]()
service_name => 'APPS1',
![]()
module_name => 'PAYROLL',
![]()
action_name => 'PYUGEN',
![]()
waits => true,
![]()
binds => true,
![]()
instance_name => null)
![]()
/**//* code to be traced executes during this time window */
![]()
dbms_monitor.serv_mod_act_trace_disable(
![]()
service_name => 'APPS1',
![]()
module_name => 'PAYROLL',
![]()
action_name => 'PYUGEN')
利用DBMS_MONITOR包,Oracle可为要跟踪的特定的业务操作提供完全支持激活或停止诊断数据收集的方法。
测试扩展SQL跟踪。试一试吧。查看第一个跟踪文件只需使用一个简单的SQL*Plus会话,就如同下面这样:
CODE:
alter session set timed_statistics=true;
![]()
alter session set max_dump_file_size=unlimited;
![]()
alter session set tracefile_identifier='Hello';
![]()
/**//* only in Oracle Database 8.1.7and later */
![]()
alter session set events '10046 trace name context forever, level 12';
![]()
select 'Howdy, it is '||sysdate from dual;
![]()
exit;
然后在由USER_DUMP_DEST实例参数的值命名的目录中寻找文件名中包含字符串"Hello"的最新写入的.trc文件。用你最喜欢的文本编辑器打开它。 阅读Oracle MetaLink注释39817.1或(Optimizing Oracle Performance,《优化Oracle性能》)一书,以便大概了解原始跟踪文件中有些什么。一定要运行跟踪文件上的tkprof,并研究其输出,但也不要由于有了tkprof就不再看原始的跟踪文件。跟踪文件中还有许多tkprof没有向你展示的内容。
如果你不仅需要一个由简单的SELECT from DUAL 生成的跟踪文件,还需要一个更感兴趣的跟踪文件,那么需要跟踪下面这条SQL语句:
CODE:
select object_type, owner, object_name from dba_objects;
由此得到的跟踪数据会让你感到很满意,因为Oracle数据库内核替你完成了惊人的工作量。
创建资源描述了正确而详细的诊断数据之后,你需要以摘要的形式对其进行查看,这有助于你以最快的速度做出响应。至少是从20世纪70年代开始,计算机程序员使用的摘要格式就是资源描述。资源描述只是一张表,它将所用时间分解为若干有用的子集,并按各子集所用时间降序排列。下面是一个资源描述的例子:
CODE:
Response Time Component Duration
![]()
-------------------------- ----------
![]()
Freeway at <50% speed limit 28.3m 59%
![]()
Finding a parking spot 7.2m 15%
![]()
Waiting at traffic lights 5.2m 11%
![]()
Freeway at ≥50% speed limit 4.0m 8%
![]()
Other 3.1m 6%
![]()
-------------------------- ----------
![]()
Total 47.8m 100%
这个资源描述说明买一辆速度更快的车不会使你能够更快地到达工作地点。
要从跟踪文件创建资源描述,有两种方法可以采用。
自己动手。《Optimizing Oracle Performance》一书中有所说明。
使用别人的工具。Oracle的tkprof和trcanalyzer(跟踪分析器)工具可为你完成一部分工作,但不是全部。
