sql net message from client大部分情况下对于数据库来说是空闲等待事件,表示数据库在等待接受客户端的请求,但是对于application来说就不一定是空闲的,因为空闲等待事件消耗的时间一样属于响应时间范畴内,因此这个等待事件可能反映了中间件上处理比较慢,或者是中间件与数据库之间的网络存在问题.
1.sql net message from client对于数据库来说是空闲等待事件,但是这不一定准确,经常发现session在等待sql net message from client的时候,实际上session是在消耗cpu的,这个时候session的status='ACTIVE',因此这时候我们需要通过v$session结合v$sql找到sql语句,同时观察sql的buffer gets,disk reads,cpu time,elapsed time是否也是在增长的,如果是在增长,那么我们需要跟踪下sql是否存在效率问题
2.sql net message from client 等待的session的status='INACTIVE',这时候说明了session已经不再执行sql语句了,可能是等待接受客户端的请求,或者是给客户端返回结果,这时候可以根据v$session关联v$sql的信息,检查v$sql中cpu_time和elapsed time是否在增长,row_processed,如果row_processed是在增长,但是buffer_gets和disk_reads基本不变,那么可能是说明了数据库在给中间件返回行数,如果发现返回行数的过程中效率比较慢,那么可能是中间件和数据库之间的网络通讯存在问题,因此这时候最简单的方式检测是把应用部署在中间件上,或者是部署在和中间件一个网段的机器上来检测,如果速度快了说明是中间件和数据库之间的网络存在问题,需要处理网络问题.