使用ttTraceMon进行TimesTen故障分析

1.   TraceMon介绍

TraceMon工具是TimesTen提供的一个底层的Debug工具,可以通过TraceMon跟踪TimesTen的内部Trace详细信息,类似于Oracle的SYSDUMP;对于TimesTen来说,由于其运行在内存中的特点,不能像Oracle那样有详细的记录信息,所有的信息都是瞬间值,对于能重现的故障或者性能问题,使用TraceMon跟踪分析,可以说是不二的选择了。更多介绍可以参考官方文档《TimesTen Troubleshooting Guide》或者Oracle技术论坛。

2.   使用注意事项

   TraceMon是TimesTen提供的一个底层的Debug工具,既然是底层工具,那么使用自然会存在一定的风险。

   TraceMon最主要的风险在于对性能的消耗,特别是CPU的消耗最为严重,所以使用时需要非常小心,不建议对生产系统进行全库的Trace,全库Trace不单对性能消耗过大,日志量也非常太大,不便于问题的分析和定位;在生产系统中使用建议请求Oracle的技术支持。

3.   TraceMon功能介绍

TraceMon支持对大部分组件的跟踪,具体的组件如下:

TT 7.0.x:

Trace> show

LATCH        ... 0

LOCK         ... 0

LOG          ... 0

LOGF         ... 0

TRACE        ... 0

API          ... 0

HEAP         ... 0

SM           ... 0

XACT         ... 0

EE           ... 0

CG           ... 0

SQL          ... 0

TEST         ... 0

FLOW         ... 0

PT           ... 0

ERR          ... 1

REPL         ... 0

OPT          ... 0

CKPT         ... 0

XA           ... 0

ORACON       ... 0

AGING        ... 0

PLOAD        ... 0

AUTOREFRESH  ... 0

 

TT 11.2.2新增:

 ASYNCMV    ... 0

 CGRID      ... 0

 CGRIDC     ... 0

 DBG0       ... 0

 DBG1       ... 0

 DEADLOCK   ... 0

 IX         ... 0

 IXGC       ... 0

 LOB        ... 0

 MEM        ... 0

 PREP       ... 0

 INTERRUPT  ... 0

其中对SQL/API/LOCK/ERR/AGING/AUTOREFRESH提供相应的使用文档说明。

1)   SQL组件

SQL组件分为2、3、4、5四个等级:

Level 2:输出为SQL命令的编译(Preparing)过程。

Level 3:在Level 2的基础上加上SQL命令执行(Executing)。

Level 4:在Level 3的基础上加上命令共享池的相关编译信息(prepares not being done because the prepared command already exists in the pool),或者是SQL命令不在共享池内的重新编译。Level 4 ttTraceMon 同时会输出opening、fetching和closing.

Level 4:在Level 4的基础上,同时输出一些内部信息,比如命令编号。

2)   lock组件

   Lock组件用于跟踪应用锁行为,为观察死锁或锁等待;锁跟踪的信息会产生大量正常锁的信息,这可能会使得跟踪的信息阅读起来比较困难。lock组件分为1、2、3、4、6五个等级:

Level 1:输出Trace期间监控到的死锁。

Level 2:在Level 1的基础上加上分配锁失败的原因。

Level 3:在Level 2的基础上加上锁等待(锁分配或者未分配)。

Level 4:在Level 3的基础上加上所有锁的分配和释放,锁调用及死锁检测器的机制。

Level 6:在Level 4的基础上加上循环遍历。

3)   API组件

API组件是用于跟踪一些连接到Data Store、连接属性变更及事务提交等,API分为1、2、3、4四个等级。

Level 1:所有回滚的事务,有subdaemon恢复异常中断的应用程序连接。

Level 2:在Level 1的基础上加上一些低空间条件。

Level 3:在Level 2的基础上加上操作Data Store的创建、建立连接、断开连接、checkpoint、backup和空间紧凑;提交或回滚的连接以及一些其他的操作。

    Level 4:在Level 3的基础上加上其他操作进行TimesTen的内部API级别。它不显示大量的存储管理器和索引操作内部完成。

4)   Err组件

    显示所有直接驱动错误信息,Err组件默认等级为Level 1,这个等级只会输出一些致命的错误信息。

    Level 1:所有异常引起的错误信息,比如事务超时;Level 2会输出很多由TimesTen内部处理的错误信息。

5)   AGING组件

AGING组件主要用于跟踪AGING的开始和结束,AGING期间多少数据被subdaemon删除。AGING分为1、2、3、4四个等级。

     Level 1:subdaemon启动最近一次AGING的LRU算法或time-based算法;没有达到阀值时,重复的执行LRU算法老化;subdaemon停止LRU算法或time-based算法。

    Level 2:在Level 1的基础上加上Aging开始和结束,结束的原因信息和共删除的记录数。

Level 3:在Level 2的基础上加上每个Aging周期删除的数据量的详细信息。

Level 4:在Level 3的基础上加上加上aging 每次被subdaemon唤醒的信息。

6)   Autorefresh组件

   Autorefresh组件用于获取Cache Group刷新进程相关操作信息。Autorefresh分为1、2、3、4四个等级。

Level 1: 自动刷新间隔汇总,启动自动刷新时间;每个间隔刷新的记录数;每个刷新间隔根表刷新的记录数;从上次Cache Agent进程启动至今共刷新的记录数;从上次Cache Agent进程启动至今根表刷新的记录数;

 Level 2:在Level 1的基础上加上每个Cache Group启动的时间;每个Cache Group刷新的记录数;每个Cache Group根表刷新的记录数;从上次Cache Agent启动至今每个Cache Group刷新的总记录数;从上次Cache Agent启动至今每个Cache Group根表刷新的总记录数;每个Cache Group刷新结束时间。

   Level 3:在Level 2的基础上加上Cache Group刷新启动时间,刷新记录数;从Cache Agent启动刷新记录数;Cache Group刷新结束时间。

   Level 4:在Level 3的基础上加上每个表的刷新详细信息;每个表的自动刷新启动时间;自动刷新的查询语句;查询语句在Oracle端执行的时间(单位为milliseconds),包括子表;查询fetch在Oracle端执行的时间(单位为milliseconds),包括子表;查询结果在TimesTen的端应用的时间(单位为milliseconds),包括子表;自动刷新结束时间;自动刷新到哪个bookmark (logseq) 已经完成。

4.   使用方法

    TraceMon的使用方法很简单,只需根据需求按照如下方法打开Trace跟踪,跟踪完成后关闭即可;这里比较复杂的是如何判断跟踪的类型及跟踪的级别,这个需要结合应用故障类型及相关经验综合考虑,建议请求Oracle的官方支持。

 tttracemon rta_acc_d

---打开Trace跟踪

show

outfile /mdb/others/trace/alltrace01.txt        ##确保日志够磁盘空间充足

flush

dump

connection all off;

level SQL 4

level lock 4

connection XX on;  ##XX代表连接的Connection Id,多个Id采用多个

----关闭Trace跟踪

connection all off;

level SQL 0

level lock 0

outfile 0

 

以上的例子根据connection id进行跟踪,如果不执行connection all off操作即是全库跟踪。

5.   日志分析

    截取Trace的输出日志如下:

22:13:34.805       2 SQL      4L   28C 5243172P Opening: SELECT BILL_SEQ FROM RTA_ONLINE_BILL WHERE USER_ID = :1_acctid AND BILL_MONTH = :2_billmonth ;

22:13:34.805       3 SQL      4L   28C 5243172P Fetching: SELECT BILL_SEQ FROM RTA_ONLINE_BILL WHERE USER_ID = :1_acctid AND BILL_MONTH = :2_billmonth ;

22:13:34.805       5 SQL      4L   28C 5243172P Closing: SELECT BILL_SEQ FROM RTA_ONLINE_BILL WHERE USER_ID = :1_acctid AND BILL_MONTH = :2_billmonth ;

 

日志输出可以分为7列:

第一列为时间串: 22:13:34.805

第二列为序列: 269

第三列为组件类型: SQL

第四列为抓取的等级,也就是该日志属于哪个级别: 2L

第五列为Connection Id号: 3C

第六列为进程号: ProcessId

第七列为操作(Operation): Preparing: SELECT BILL_SEQ FROM RTA_ONLINE_BILL WHERE USER_ID = :1_acctid AND BILL_MONTH = :2_billmonth ;

 

附:相关TraceMon故障分析的例子可以参考之前编写的《使用TraceMon分析TimesTen应用超时问题》
Tony.Tang[汤云]2015.02.02

----------------End---------------------------------

 

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

转载于:http://blog.itpub.net/24930246/viewspace-1424414/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值