Oracle
Oracle TKPROF 插入數據與文本結果不匹配
我試圖理解來自 Windows 上 Oracle 12.2 數據庫的 SQL 跟踪的輸出。我使用 TKPROF 來解釋生成的跟踪文件。此實用程序生成一個文本文件輸出和一個 SQL 文件輸出。但是兩個文件之間的數據不匹配。
數據是使用如下語法生成的
tkprof Trace.trc trace.trc.txt insert=trace.trc.sql
對於特定查詢,通過文本文件輸出的 TKPROF 為:
call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 13 0.04 0.03 0 0 1 0 Fetch 13 0.00 0.07 6 26 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 27 0.04 0.11 6 26 1 0
但是 TKPROF 的 SQL 輸出為該查詢生成的數據與 Elapsed 列的數字不同。
這是插入語句:
INSERT INTO tkprof_table ( date_of_insert, cursor_num, depth, user_id, parse_cnt, parse_cpu, parse_elap, parse_disk, parse_query, parse_current, parse_miss, exe_count, exe_cpu, exe_elap, exe_disk, exe_query, exe_current, exe_miss, exe_rows, fetch_count, fetch_cpu, fetch_elap, fetch_disk, fetch_query, fetch_current, fetch_rows, ticks, sql_statement ) VALUES ( SYSDATE, 4, 0, 9, 1, 0, 86, 0, 0, 0, 0, 13,46875, 31424, 0, 0, 1, 2, 0, 13, 0, 79075, 6, 26, 0, 0, 152918 , 'SELECT [...]')
然後將這些 SQL 列轉換為匹配文本文件的表佈局,即:
call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0 86 0 0 0 0 Execute 13 46875 31424 0 0 1 0 Fetch 13 0 79075 6 26 0 0
Oracle 的文件說 TKPROF Elapsed 值是
“語句的所有解析、執行或獲取呼叫的總經過時間(以秒為單位)。”
我相信這對於文本文件輸出是準確的。但是 SQL 數據必須是其他一些度量。我找不到任何為不匹配數據定義度量單位的文件。
有一個“滴答”列,似乎對應於 CPU 滴答。但我不知道這是否也是不匹配的值。如果是這樣,我如何將該數據轉換為秒?
或者看起來這些值可能是微秒。那是對的嗎?是否有明確定義該計量單位的地方?
這些值很好。它們只是在 tkprof 輸出中被截斷並顯示為秒而不是微秒。
SQL 執行時間通常以微秒為單位。
例如,參見V$SQL:
ELAPSED_TIME
數字
此游標用於解析、執行和獲取的經過時間(以微秒為單位)。如果游標使用並行執行,則 ELAPSED_TIME 是查詢協調器的累積時間,加上所有並行查詢從屬程序。
Tkprof 還在行源操作部分以微秒為單位顯示時間(並將單位顯示為
us
)。我沒有找到任何明確的參考來描述 TKPROF_TABLE 的所有列,說明時間單位是微秒,但它很合乎邏輯。