使用dtrace跟蹤oracle函式呼叫
以前用gdb跟蹤過oracle的一些函式呼叫,今天找了本dtrace的書看了看。
dtrace比gdb的能力強大多了,而且簡單了很多。
語法基本是 awk + C,做了3個例子,繼續研究
gdb的例子請看:
Tracing Oracle Internal Calls
http://space.itpub.net/?uid-8242091-action-viewspace-itemid-676943
****************************************************************
1.跟蹤邏輯讀取的塊。
****************************************************************
#!/usr/sbin/dtrace -s
#pragma D option quiet
struct arg {
int32_t arg0;
int32_t arg1;
int32_t arg2;
int32_t arg3;
};
struct arg *arg;
pid$1::kkspsc0:entry{
i=0;
}
pid$1::kcbgtcr:entry{
i++;
arg=(struct arg *)copyin(arg0,sizeof(arg));
printf("%5d %s:%s:%s:%s 0x%08x[%d,%d]\n",i,probeprov,probemod,probefunc,probename, arg->arg1,arg->arg1>>22,arg->arg1&0x3fffff);
}
bash-3.2# ./aaa.d 2068
1 pid2068:oracle:kcbgtcr:entry 0x010000aa[4,170]
2 pid2068:oracle:kcbgtcr:entry 0x010000aa[4,170]
3 pid2068:oracle:kcbgtcr:entry 0x010000ab[4,171]
4 pid2068:oracle:kcbgtcr:entry 0x010000ac[4,172]
5 pid2068:oracle:kcbgtcr:entry 0x010000ad[4,173]
6 pid2068:oracle:kcbgtcr:entry 0x010000ae[4,174]
7 pid2068:oracle:kcbgtcr:entry 0x010000af[4,175]
8 pid2068:oracle:kcbgtcr:entry 0x010000b0[4,176]
9 pid2068:oracle:kcbgtcr:entry 0x010000b1[4,177]
10 pid2068:oracle:kcbgtcr:entry 0x010000b2[4,178]
11 pid2068:oracle:kcbgtcr:entry 0x010000b3[4,179]
12 pid2068:oracle:kcbgtcr:entry 0x010000b4[4,180]
13 pid2068:oracle:kcbgtcr:entry 0x010000b5[4,181]
14 pid2068:oracle:kcbgtcr:entry 0x010000b6[4,182]
15 pid2068:oracle:kcbgtcr:entry 0x010000b7[4,183]
16 pid2068:oracle:kcbgtcr:entry 0x010000b9[4,185]
17 pid2068:oracle:kcbgtcr:entry 0x010000ba[4,186]
18 pid2068:oracle:kcbgtcr:entry 0x010000bb[4,187]
19 pid2068:oracle:kcbgtcr:entry 0x010000bc[4,188]
20 pid2068:oracle:kcbgtcr:entry 0x010000bd[4,189]
21 pid2068:oracle:kcbgtcr:entry 0x010000be[4,190]
22 pid2068:oracle:kcbgtcr:entry 0x010000bf[4,191]
23 pid2068:oracle:kcbgtcr:entry 0x010000c0[4,192]
24 pid2068:oracle:kcbgtcr:entry 0x010000c1[4,193]
25 pid2068:oracle:kcbgtcr:entry 0x010000c2[4,194]
26 pid2068:oracle:kcbgtcr:entry 0x010000c3[4,195]
27 pid2068:oracle:kcbgtcr:entry 0x010000c4[4,196]
28 pid2068:oracle:kcbgtcr:entry 0x010000c5[4,197]
****************************************************************
2.跟蹤latch的獲取和釋放
****************************************************************
SELECT LOWER(addr)||','||NAME||','||'C'||child#||','||latch#||','||level# FROM v$latch_children
UNION ALL
SELECT LOWER(addr)||','||NAME||','||'P'||','||latch#||','||level# FROM v$latch
#!/usr/sbin/dtrace -s
#pragma D option quiet
#pragma D option destructive
pid$1::kslgetl:entry,pid$1::kslfre:entry{
printf("%s:%s:%s:%s\t", probeprov,probemod,probefunc,probename);
system("grep %x latchlist.txt",arg0);
}
bash-3.2# ./aaa.d 2068
pid2068:oracle:kslfre:entry 000000009e4a3748,session idle bit,C2,14,1
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 000000009e4a3748,session idle bit,C2,14,1
pid2068:oracle:kslfre:entry 000000009e4a3748,session idle bit,C2,14,1
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
****************************************************************
3.函式呼叫棧
****************************************************************
#!/usr/sbin/dtrace -s
#pragma D option quiet
pid$1::*:entry{
printf("%s.%s.%s", probemod,probefunc,probename);
ustack();
}
dtrace比gdb的能力強大多了,而且簡單了很多。
語法基本是 awk + C,做了3個例子,繼續研究
gdb的例子請看:
Tracing Oracle Internal Calls
http://space.itpub.net/?uid-8242091-action-viewspace-itemid-676943
****************************************************************
1.跟蹤邏輯讀取的塊。
****************************************************************
#!/usr/sbin/dtrace -s
#pragma D option quiet
struct arg {
int32_t arg0;
int32_t arg1;
int32_t arg2;
int32_t arg3;
};
struct arg *arg;
pid$1::kkspsc0:entry{
i=0;
}
pid$1::kcbgtcr:entry{
i++;
arg=(struct arg *)copyin(arg0,sizeof(arg));
printf("%5d %s:%s:%s:%s 0x%08x[%d,%d]\n",i,probeprov,probemod,probefunc,probename, arg->arg1,arg->arg1>>22,arg->arg1&0x3fffff);
}
bash-3.2# ./aaa.d 2068
1 pid2068:oracle:kcbgtcr:entry 0x010000aa[4,170]
2 pid2068:oracle:kcbgtcr:entry 0x010000aa[4,170]
3 pid2068:oracle:kcbgtcr:entry 0x010000ab[4,171]
4 pid2068:oracle:kcbgtcr:entry 0x010000ac[4,172]
5 pid2068:oracle:kcbgtcr:entry 0x010000ad[4,173]
6 pid2068:oracle:kcbgtcr:entry 0x010000ae[4,174]
7 pid2068:oracle:kcbgtcr:entry 0x010000af[4,175]
8 pid2068:oracle:kcbgtcr:entry 0x010000b0[4,176]
9 pid2068:oracle:kcbgtcr:entry 0x010000b1[4,177]
10 pid2068:oracle:kcbgtcr:entry 0x010000b2[4,178]
11 pid2068:oracle:kcbgtcr:entry 0x010000b3[4,179]
12 pid2068:oracle:kcbgtcr:entry 0x010000b4[4,180]
13 pid2068:oracle:kcbgtcr:entry 0x010000b5[4,181]
14 pid2068:oracle:kcbgtcr:entry 0x010000b6[4,182]
15 pid2068:oracle:kcbgtcr:entry 0x010000b7[4,183]
16 pid2068:oracle:kcbgtcr:entry 0x010000b9[4,185]
17 pid2068:oracle:kcbgtcr:entry 0x010000ba[4,186]
18 pid2068:oracle:kcbgtcr:entry 0x010000bb[4,187]
19 pid2068:oracle:kcbgtcr:entry 0x010000bc[4,188]
20 pid2068:oracle:kcbgtcr:entry 0x010000bd[4,189]
21 pid2068:oracle:kcbgtcr:entry 0x010000be[4,190]
22 pid2068:oracle:kcbgtcr:entry 0x010000bf[4,191]
23 pid2068:oracle:kcbgtcr:entry 0x010000c0[4,192]
24 pid2068:oracle:kcbgtcr:entry 0x010000c1[4,193]
25 pid2068:oracle:kcbgtcr:entry 0x010000c2[4,194]
26 pid2068:oracle:kcbgtcr:entry 0x010000c3[4,195]
27 pid2068:oracle:kcbgtcr:entry 0x010000c4[4,196]
28 pid2068:oracle:kcbgtcr:entry 0x010000c5[4,197]
****************************************************************
2.跟蹤latch的獲取和釋放
****************************************************************
SELECT LOWER(addr)||','||NAME||','||'C'||child#||','||latch#||','||level# FROM v$latch_children
UNION ALL
SELECT LOWER(addr)||','||NAME||','||'P'||','||latch#||','||level# FROM v$latch
#!/usr/sbin/dtrace -s
#pragma D option quiet
#pragma D option destructive
pid$1::kslgetl:entry,pid$1::kslfre:entry{
printf("%s:%s:%s:%s\t", probeprov,probemod,probefunc,probename);
system("grep %x latchlist.txt",arg0);
}
bash-3.2# ./aaa.d 2068
pid2068:oracle:kslfre:entry 000000009e4a3748,session idle bit,C2,14,1
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 000000009e4a3748,session idle bit,C2,14,1
pid2068:oracle:kslfre:entry 000000009e4a3748,session idle bit,C2,14,1
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslgetl:entry 00000000601069d8,shared pool,C1,307,7
pid2068:oracle:kslfre:entry 00000000601069d8,shared pool,C1,307,7
****************************************************************
3.函式呼叫棧
****************************************************************
#!/usr/sbin/dtrace -s
#pragma D option quiet
pid$1::*:entry{
printf("%s.%s.%s", probemod,probefunc,probename);
ustack();
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-755399/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 像跟蹤分散式服務呼叫那樣跟蹤 Go 函式呼叫鏈分散式Go函式
- 棧呼叫關係跟蹤
- Ftrace使用指南及跟蹤系統呼叫
- Oracle 跟蹤全部使用者Oracle
- oracle 跟蹤其他使用者Oracle
- 使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- Oracle 10046跟蹤的使用Oracle
- [zt] oracle跟蹤檔案與跟蹤事件Oracle事件
- oracle跟蹤檔案與跟蹤事件(zt)Oracle事件
- oracle跟蹤檔案和跟蹤事件(zt)Oracle事件
- ORACLE 跟蹤工具Oracle
- 呼叫鏈與日誌的關聯式跟蹤查詢
- Itrace跟蹤程式呼叫庫函式引數選項-怎麼學習linux運維函式Linux運維
- 轉:使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- 【TRACE】Oracle跟蹤事件Oracle事件
- Oracle跟蹤會話Oracle會話
- Oracle 跟蹤事件【轉】Oracle事件
- Oracle跟蹤檔案Oracle
- oracle linux dtraceOracleLinux
- oracle 跟蹤當前使用者會話Oracle會話
- 分散式呼叫鏈跟蹤工具Jaeger?兩分鐘極速體驗分散式
- oracle session(會話) 跟蹤OracleSession會話
- Oracle跟蹤事件 -- set eventsOracle事件
- Oracle 10G 跟蹤Oracle 10g
- Oracle 跟蹤事件 set eventOracle事件
- Oracle跟蹤事件和dumpOracle事件
- oracle跟蹤事件(轉載)Oracle事件
- 使用docker-compose 一鍵部署你的分散式呼叫鏈跟蹤框架skywalkingDocker分散式框架
- 使用rownum減少函式呼叫函式
- 使用Linux Strace跟蹤除錯Oracle程式程式Linux除錯Oracle
- 使用Error Stack跟蹤Oracle錯誤堆疊資訊ErrorOracle
- DiagnosticSource DiagnosticListener 無侵入式分散式跟蹤分散式
- ORACLE 10046 設定跟蹤事件後無跟蹤檔案Oracle事件
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- 用oracle trace 來跟蹤sessionOracleSession
- oracle跟蹤事件(dump)總結Oracle事件
- alter session set events /Oracle跟蹤SessionOracle