ITPub博客

首页 > 数据库 > 数据库开发技术 > 【新炬名师大讲堂】使用ttTraceMon进行TimesTen故障分析

【新炬名师大讲堂】使用ttTraceMon进行TimesTen故障分析

数据库开发技术 作者:shsnchyw 时间:2015-02-09 17:06:33 0 删除 编辑

(本文转自“NCN新炬团队博客”)

 

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.02

 

—————————-End—————————————-

原文链接:http://ncn.cn/archivers/%e4%bd %bf%e7%94%a8tttracemon%e8%bf%9b%e8%a1%8ctimesten%e6%95%85%e9%9a%9c%e5%88%86%e6%9e%90.html

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

请登录后发表评论 登录
全部评论

注册时间:2014-10-16

  • 博文量
    147
  • 访问量
    268248