ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一次通过DB_LINK抽取数据过慢原因分析

一次通过DB_LINK抽取数据过慢原因分析

原创 Linux操作系统 作者:gaopengtttt 时间:2012-03-22 10:31:39 0 删除 编辑

问题1

   核心数据库使用的共享服务器模式,导致异常等待事件

virtual circuit status

非常巨大。

   ORACLE 官方描述如下:

    "virtual circuit wait"    - for when the shared server is

                              blocked waiting on a specific

                              circuit / message

   检查核心数据库确实使用了共享模式,修改提取数据的DB_LINK,使用独占的模式连接来避免这个问题

 

问题2

   分析发现存储过程都调用了函数Get_Rate,而Get_Rate大量循环的调用语句,我测试的时候调用测试未300W次,并且Get_Rate函数使用游标取出数据进行循环,而引用的T_CHG_RATE来自远程,这样大量循环调用在加上远程网络延迟,等待时间也就加长。

   和智软商量后决定建立Get_Rate到本地,并且加入判断如果为人民币就不调用此函数。此游标经过调整数据返回速度大大减少,几个小时的返回时间减少到5分钟左右。

 

问题 3

   分析发现,很多存储过程,游标每返回一行数据就会做一条判断,而判断的表确是放通过DB_LINK进行调用,如果游标返回很大量的行,那网络的延迟就会越发的明显。

   建议建立判断表在本地加快速度,同时考虑更好的游标数据抽取方式,不实用循环,待改进。

create or replace procedure Bulk_Test2(p_array_size in number)
as
 l_tablename dbms_sql
Varchar2_Table;
 cursor c is select table_name from user_tables;
begin
     open c;
     loop
         fetch c bulk collect into l_tablename limit p_array_size;
         
         forall i in 1..l_tablename count
                insert into t3 values (l_tablename(i));
         exit when c%notfound;
     end loop;
end;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-719224/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORA-01555 和游标
请登录后发表评论 登录
全部评论
wxh gp_22389860

注册时间:2008-10-13

  • 博文量
    638
  • 访问量
    2809361