Oracle

Oracle TKPROF 插入數據與文本結果不匹配

  • October 11, 2018

我試圖理解來自 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 的所有列,說明時間單位是微秒,但它很合乎邏輯。

引用自:https://dba.stackexchange.com/questions/219877