使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【新炬名師大講堂】使用ttTraceMon進行TimesTen故障分析
- 使用pprof進行效能分析
- 使用shell進行日誌分析
- 使用HangFG進行Oracle Hang分析Oracle
- 使用pandas進行資料分析
- ORACLE 使用TRACE進行SQL效能分析OracleSQL
- 使用AI進行需求分析的案例研究AI
- 利用 Java dump 進行 JVM 故障診斷JavaJVM
- 使用 XDebug + Webgrind 進行 PHP 程式效能分析WebPHP
- 影像分析,使用Halcon進行缺陷檢測
- 使用流量分析系統進行資產梳理
- 使用apriori演算法進行關聯分析演算法
- 使用DBMS_PROFILER進行PL/SQL效能分析SQL
- 使用Java和Elastic Stack進行日誌分析JavaAST
- 【故障】“ORACLE使用者被鎖定”故障處理和分析Oracle
- Pandas使用DataFrame進行資料分析比賽進階之路(一)
- 使用火焰圖進行Java應用效能分析Java
- Docker中使用Xhprof 對程式碼進行效能分析Docker
- 使用xhprof進行線上PHP效能追蹤及分析PHP
- 使用 Spark 進行微服務的實時效能分析Spark微服務
- 使用sqld360進行特定SQL調優分析SQL
- 使用 Python 進行資料分析:入門指南Python
- 故障分析 | Greenplum Segment 故障處理
- 使用 functrace 輔助進行 Go 專案原始碼分析Go原始碼
- 教程:使用Python進行基本影像資料分析!Python
- centos7使用ntopng進行流量監控和分析CentOS
- 對比Elasticsearch,使用Doris進行高效日誌分析(下)Elasticsearch
- 對比Elasticsearch,使用Doris進行高效日誌分析(上)Elasticsearch
- 利用perf進行效能分析
- 由於 DNS 查詢故障,DSA 操作無法進行DNS
- 使用GPT4進行資料分析,竟然被他騙了GPT
- 使用python進行Oracle資料庫效能趨勢分析PythonOracle資料庫
- -t【Oracle-故障管理】-Trace跟蹤會話和會話執行慢故障分析Oracle會話
- 故障分析 | Kubernetes 故障診斷流程
- 案例分析|執行緒池相關故障梳理&總結執行緒
- 故障分析 | MySQL死鎖案例分析MySql
- 怎麼進行資料分析
- NABC模型進行需求分析模型