SQL*Net message from dblink

原创 2017-08-07 Oracle 宅必备

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

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

Alt text

这个等待事件发生在会话在等待从远程数据库获取信息,该信息是通过dblink进行传输的,oracle把该等待事件归类于network类

查询实时的等待

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

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

Alt text

P1代表driver id

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

查询非实时的等待

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

Alt text

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

如何发生的

当我们的SQL语句通过dblink访问远程数据库时,需要先将远程数据传输到本地再进行处理,在完成这个动作之前该会话处于SQL*Net message from dblink等待

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

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

如何调优

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

Alt text