關於trace檔案中的recursive calls , elapse time及cpu time,
Recursive Calls. Number of recursive calls generated at both the user and system level. Oracle Database maintains tables used for internal processing. When it needs to change these tables, Oracle Database generates an internal SQL statement, which in turn generates a recursive call.
In short, recursive calls are basically SQL performed on behalf of your SQL. So, if you had to parse the query, for example, you might have had to run some other queries to get data dictionary information. These would be recursive calls. Space management, security checks, calling PL/SQL from SQL—all incur recursive SQL calls
根據oracle的定義及常見的導致recursive calls 的情景,總結了一下,不知是否準確:
執行一條SQL語句時,產生的對其他SQL的呼叫,這些額外的語句稱之為''recursive calls''或''recursive SQL statements''.
1. Parse - 硬解析時會出現更多的 recursive calls,軟解析可以避免recursive calls.
2. Security checks - 訪問許可權相關的資料字典表
3. Firing of database triggers - 觸發DB觸發器
4. Handle constraint - Enforcement of referential integrity constraints,引用完整性約束
5. 資料字典記錄了所有物件的結構、資料資訊,在物件結構、資料發生變化時都會訪問資料字典
6. Space management - 沒有足夠的空間時,Oracle 透過Recursive Call訪問資料字典來動態的分配空間。
7. 執行DDL語句時,ORACLE總是隱含的發出一些recursive SQL語句,來修改資料字典資訊,以便成功執行該語句。
8. 當Shared Pool過小,data dictionary cache 也會相應的過小,沒有足夠的空間儲存ORACLE的系統資料字典資訊時,
會發生 Recursive calls,這些Recursive calls會將資料字典資訊從硬碟讀入記憶體中。
9. 儲存過程、包、觸發器,函式或匿名PL/SQL塊內如果有SQL呼叫的話,也會產生recursive SQL。
10. Calling PL/SQL from SQL - 從SQL中呼叫PL/SQL
第9 , 10 理解起來比較糾結, 比如 select max(column_name) from tab1 where col2=xxx ; 做了一下trace , 首次執行
會出現一次 recursive calls , 第二次執行就是 0 了。 procedure 或 packages 中肯定有SQL呼叫, 非SQL部分都是一些遊標
處理,計算等, 稱為NON-RECURSIEVE CALLS , 目前我們在執行一個packages時,發現 NON-RECURSIEVE CALLS 及 RECURSIEVE CALLS
消耗的時間都比較高, 而且發現所有的執行所花的時間(一個一個相加) 不等於後面的 TOTAL NON-RECURSIEVE CALLS 及
TOTAL RECURSIEVE CALLS 的和 (雖然比較接近)。 不知道這些時間如何計算的 ? 聽Oracle顧問說trace中時間有一定誤差
是存在的 , 現在可以透過另外一個工具來替代trace .
trace檔案中 Elapsed times include waiting on following events: 部分的時間消耗和 cpu time, elapsed 是什麼關係 , 如何計算 ?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-741855/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中WAIT TIME 和 CPU TIMEOracleAI
- cpu time 分析
- Oracle CPU TIME 漫談Oracle
- oracle 中關於當前的sysdate,sysstimestap,current_date,curent_timestamp 區別Oracle
- recursive calls ,db block gets , consistent gets的含義BloC
- 關於golang的time包總結Golang
- DB CPU time% 的計算公式公式
- 關於執行計劃裡recursive calls,db block gets和consistent gets引數的解釋BloC
- 理解TimesTen中兩個CheckPoint檔案與Trans Log的關係及其原理
- 關於Corba呼叫的Timeout 問題ORB
- Python中time, strftime和strptimePython
- recursive calls, db block gets,consistent gets,physical ReadsBloC
- 關於timestamp資料型別資料型別
- iOS 關於NSTimer的迴圈引用iOS
- 關於DBA_OBJECTS的LAST_DDL_TIMEObjectAST
- oracle之time zone時區timestamp with time zone相關的概念之一Oracle
- SyncTime for mac 簡單的檔案同步工具Mac
- SyncTime for mac(簡單的檔案同步工具)Mac
- Mysql中的Datetime和Timestamp比較MySql
- MySQL中datetime和timestamp的區別MySql
- 關於Oracle Timezone的一點總結Oracle
- MySQL關於timestamp和mysqldump的一個“bug”MySql
- python中time.mktime()的轉換Python
- Swift 中的 RuntimeSwift
- Linux中atime,ctime與mtime的細節疑問總結Linux
- 控制檔案相關 -- MAXLOGHISTORY ,control_file_record_keep_time
- 關於babel-polyfill和babel-runtimeBabel
- 請教BANQ,關於Timer開發
- 控制檔案恢復—從trace檔案中恢復
- Go Time包中的NewTimer()和After()函式Go函式
- Tracing Oracle Internal Calls - Trace SqlplusOracleSQL
- 小技巧67:在沒有TimeMachine硬碟的環境下使用Time Machine備份檔案Mac硬碟
- TopSQL,計算某條sql的CPU time.SQL
- pl/sql developer中關於TIMESTAMP顯示格式的疑問和學習SQLDeveloper
- golang timeoutHandler解析及kubernetes中的變種Golang
- TimesTen IX鎖及用途介紹[TimesTen運維]運維
- 6、TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE的實踐理解
- 26、控制檔案相關 -- MAXLOGHISTORY ,control_file_record_keep_time