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应用超时问题。
Created by Tony.Tang[TangYun]2015.12
------------------------End---------------------------
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24930246/viewspace-1960940/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24930246/viewspace-1960940/