閱讀42 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何利用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

  上一篇:go 關於memset()
  下一篇:go github空間配額說明