如何利用JDBC啟動Oracle 自動追蹤(auto trace)
有時我們需要對執行SQL的具體執行過程做一個追蹤分析,特別是在應用程序性能優化的時候。Oracle兩個工具可以幫助我們做好性能分析,一個是SQL_TRACE,一個是SESSION_EVENT。SQL_TRACE跟蹤SQL執行過程,如解析時間、執行時間、查詢時間等;SESSION_EVENT跟蹤執行過程的等待事件,如等待客戶端響應時間,等待本地磁盤IO事件等等。 開啟Oracle自動追蹤必須使用DBA權限。
使用JDBC開啟SQL_TRACE的方法:
conn.prepareStatement("alter
SESSION SET SQL_TRACE=TRUE");
ps.execute();
使用JDBC開啟SESSION_EVENT的方法:
開啟:ps=conn.prepareStatement( "ALTER
SESSION SET EVENTS '10046 trace name context forever, level 12'");
ps.execute();
關閉:ps=conn.prepareStatement( "ALTER
SESSION SET EVENTS '10046 trace name context off'");(在關閉連接前執行關閉追蹤)
ps.execute();
下麵是開啟這兩個追蹤得到的trace文件:

Oracle執行過程分析:
- 在對執行sql的過程中,主要執行過程耗費在了Oracle的Fetch階段
- Fetch的OCI調用次數為146次 ,耗費時間為50.49秒,查詢條數為145259條
Oracle執行過程中的等待事件分析:
- oracle服務器向客戶端發送時等待時間為0,說明服務器端網絡傳輸等沒有問題
- oracle服務器等待客戶端響應總時間為5.92秒,說明客戶端處理數據及網絡傳輸等需要耗費一定時間
- oracle服務器磁盤IO時間為48.37秒,說明主要時間耗在Oracle從磁盤中讀取數據塊上
- 把數據分批次發送給客戶端的時間耗費0.12秒,這個時間也是可以接受的
最後更新:2017-04-03 05:39:25