Oracle執行語句跟蹤 使用sql trace實現語句追蹤
1、SQL_Plus自動跟蹤:
set autotrace on explain // 顯示執行計劃
set autotrace traceonly explain // 僅顯示執行計劃
set autotrace on // 顯示執行計劃、和統計數字
set timing on // 顯示已用時間
set autotrace traceonly //顯示執行計劃、和統計數字;但不顯示sql結果
2、還可以利用10046事件來跟蹤SQL,它比SQL_TRACE提供更詳細的資訊.它有LEVEL 1,4,8,12四個級別.
其中Level 1 相當於 SQL_TRACE.下面是10046使用的例子
alter session set events '10046 trace name context forever, level 4'; --跟蹤SQL語句並顯示繫結變數
alter session set events '10046 trace name context forever, level 8'; --跟蹤SQL語句並顯示等待事件
10046:SQL到底是如何執行的。
10053:SQL為什麼要這樣執行。
SQL> alter session set events '10046 trace name context forever,level 4';
Session altered.
.... some SQL statements
SQL> alter session set events '10046 trace name context off';
Session altered.
3、SQL> alter session set sql_trace=true;
SQL>alter session set sql_trace=false;
*************************************************************************************************
set autotrace on explain // 顯示執行計劃
set autotrace traceonly explain // 僅顯示執行計劃
set autotrace on // 顯示執行計劃、和統計數字
set timing on // 顯示已用時間
set autotrace traceonly //顯示執行計劃、和統計數字;但不顯示sql結果
2、還可以利用10046事件來跟蹤SQL,它比SQL_TRACE提供更詳細的資訊.它有LEVEL 1,4,8,12四個級別.
其中Level 1 相當於 SQL_TRACE.下面是10046使用的例子
alter session set events '10046 trace name context forever, level 4'; --跟蹤SQL語句並顯示繫結變數
alter session set events '10046 trace name context forever, level 8'; --跟蹤SQL語句並顯示等待事件
10046:SQL到底是如何執行的。
10053:SQL為什麼要這樣執行。
SQL> alter session set events '10046 trace name context forever,level 4';
Session altered.
.... some SQL statements
SQL> alter session set events '10046 trace name context off';
Session altered.
3、SQL> alter session set sql_trace=true;
SQL>alter session set sql_trace=false;
*************************************************************************************************
系統上的某個介面提交資料經常超時(超過3秒),而我單獨在後臺資料庫( )執行insert,只需要17ms。提交資料的客戶端沒有任何的除錯日誌,只能透過跟蹤後臺語句記錄實際呼叫過程中的資料庫執行時間。從而發現問題耗時最多的階段。
安裝dbms_support包
SQL> @?\rdbms\admin\dbmssupp.sql SQL> grant execute on dbms_support to test;
找到需要跟蹤的會話,一個介面可能會建立多個會話,需要根據會話建立的時間來判斷真正需要跟蹤的會話。
SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'; SQL> select sid,serial#,logon_time from v$session where username=&name and program=&program; 輸入 name 的值: 'test' 輸入 program 的值: 'test.exe'
使用start_trace_in_session進行跟蹤
SQL>exec dbms_support.start_trace_in_session(1157,59729,TRUE,TRUE);
開始跟蹤後,在客戶端進行對應的操作。
使用stop_trace_in_session結束跟蹤
SQL> exec dbms_support.stop_trace_in_session(1157,59729);
使用以下的語句獲得trace檔案的位置。
SELECT d.VALUE || '\' || LOWER (RTRIM (i.INSTANCE, CHR (0))) || '_ora_' || p.spid || '.trc' trace_file_name FROM (SELECT p.spid FROM v$mystat m, v$session s, v$process p WHERE m.statistic# = 1 AND s.SID = &SID AND p.addr = s.paddr) p, (SELECT t.INSTANCE FROM v$thread t, v$parameter v WHERE v.NAME = 'thread' AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i, (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d 用文字編輯器可以直接開啟trace檔案
圖中的這一段就是對一個語句的從解析到返回資料的整個過程,如果統計從開始請求到訊息返回客戶端的時間,直接將紅框中的兩個tim相減就可以了,11592216806504-11592199796058=17010446,其單位是1/1000000秒。若要單獨獲取執行時間,可以EXEC的TIM減掉PARSE的TIM,差值即為執行的時間。其它欄位的說明可以參照這個 文件。
另外也可以使用TKPROF將trace檔案轉換成為執行計劃解析的文字。
D:\app\oracle\diag\rdbms\wxmesdb\wxmesdb\trace>tkprof wxmesdb_ora_6520.trc trace_1.txt TKPROF: Release 12.1.0.1.0 - Development on 星期三 1月 6 08:30:11 2016 Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
如上圖所示,可以得到執行時間為17秒,與上一步中透過TIM相減的差值一致。
--EOF--
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29209863/viewspace-2756509/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20200326]dbms_monitor跟蹤與SQL語句分析.txtSQL
- PostgreSQL 原始碼解讀(15)- Insert語句(執行過程跟蹤)SQL原始碼
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- 後臺執行SQL語句(oracle)SQLOracle
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- java連線oracle執行sql語句JavaOracleSQL
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視.txtSQL
- DM7聯機執行SQL語句進行加密備份與設定跟蹤日誌SQL加密
- 單個SQL語句的10046 traceSQL
- [20200422]跟蹤特定sql語句以及v$open_cursor檢視(補充).txtSQL
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視2.txtSQL
- Oracle資料庫SQL語句執行過程Oracle資料庫SQL
- SQL語句執行順序SQL
- sql語句如何執行的SQL
- Oracle基本SQL語句OracleSQL
- 100% 展示 MySQL 語句執行的神器-Optimizer TraceMySql
- [20200424]跟蹤特定sql語句以及v$open_cursor檢視(再補充).txtSQL
- oracle常用後臺程序及sql語句執行流程OracleSQL
- sql語句執行緩慢分析SQL
- mysql的sql語句執行流程MySql
- SQL 語句的執行順序SQL
- mysql執行sql語句過程MySql
- Mybatis 動態執行SQL語句MyBatisSQL
- SQL查詢語句 (Oracle)SQLOracle
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- Oracle SQL精妙SQL語句講解OracleSQL
- 【SQL】Oracle sql語句 minus函式執行效率與join對比SQLOracle函式
- Laravel 獲取執行的sql語句LaravelSQL
- MySQL cron定時執行SQL語句MySql
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- 列出oracle dbtime得sql語句OracleSQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句SQL
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- MYSQL sql執行過程的一些跟蹤分析(二.mysql優化器追蹤分析)MySql優化
- [20181119]sql語句執行緩慢分析.txtSQL
- SQL語句各子句的執行順序SQL
- mysql sql語句執行超時設定MySql