SQL*Net message to dblink等待事件

2017-08-08 Oracle 宅必备

从今天开始讲解awr报告Top 5 Timed Events部分

今天讲SQL*Net message to dblink 等待事件

Alt text

图实在没找到~

这个等待事件发生在会话在等待一个远程数据库一个确认信息,确认其发送的数据远程数据库是否收到,该数据通过dblink发送

一般是由于目标服务器无法及时接受信息

Oracle将该等待事件列为Network类

如何实时的等待

通过如下语句查询实时的等待事件

select * from v$session_wait where event=’SQL*Net message to dblink’

Alt text

P1代表driver id

P2代表通过dblink传输的字节数

这里我查了我这边所有的数据库都没抓到~

如何非实时的等待

select *
  from v$session_event
 where event like '%SQL*Net message to dblink%'
 order by time_waited desc

Alt text

注意这里的信息是从实例起来的汇总,同时由于SID是可以复用的,所以查看出来的SID并不代表上次的语句是这个等待

如何发生的

当我们的SQL语句通过dblink访问远程数据库时,需要先将远程数据传输到本地再进行处理,这时远端数据库会发送数据至本地,此时远端数据库如不能及时接受消息,会话处于SQL*Net message to dblink等待。

该等待主要发生在如下几种情形

  1. 数据库中有大量的物化视图需要定时同步远程数据库至本地
  2. 数据库中有大量SQL语句需要通过dblink从远程获取数据

如何调优

  1. 针对物化视图我们首先需要减少不必要的物化视图数量,同时采用增量更新的方式,对于DML操作频繁的主表我们需要提高刷新频率
  2. 针对SQL语句中有大量dblink的语句我们需要尽量减少dblink的访问
  3. 如果不能减少可以通过在源库建立view的方式使其在源库执行
  4. 也可以使用DRIVING_SITE hint的方式,手动指定oracle让其在源库执行。

Alt text