开启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秒,这个时间也是可以接受的