在库 db1中
create table test(id number(10), value varchar(15));
在库db2中
create table test(id number(10), value varchar(15));
然后在db1中建立到db2的dblink,DL_db2;
然后db1中执行insert into test@DL_db2 select * from test where id = %d;
总共有几万条记录,执行了2万左右后,就会出现每条insert语句花费50-90秒左右时间;
但是每条都能执行成功,why?
 

解决方案 »

  1.   

    莫非是运行久了,oracle性能会下降? 重启了就ok了,过不了多久就又出现问题了
      

  2.   

    create table t11(i int) nologging;create table t22(i int);
    insert into t22 select 1 from dual union all select 2 from dual;insert /*+ append */ into t11
    select * from t22;
      

  3.   

    我是每次都commit一次,请问上面这些sql语句有什么用处?
      

  4.   

    先在db1用pl/sql导出为csv文件  然后在db2导入
      

  5.   

    查了一下,可能是oracle数据库的原因,主机是sun os 5.9四核,一个oracle进程占用了一个cpu,
    重启了一下,现在每秒能insert 15个左右的数据,这个oracle用了5年左右,有没有什么优化措施?
      

  6.   

    1、确认select * from test where id = %d的读取速度
    2、确认网络延迟是否正常。
    3、如果目标表中原来没有记录,可以考虑用copy from ..... to..... create tablename using 的办法,减少日志的生成,可以成倍的提高效率。
      

  7.   

    select * from test where id = %d的读取速度可以,网络是正常的,
    刚连接oracle数据库时运行insert into test@DL_db2 select * from test where id = %d速度还能接受,
    运行了万条左右,每秒就只有10个左右的操作,
    越往后,速度越慢,最后竟然每个insert花了50秒左右,然后查询了一下,
    发现db1数据库中的这个会话进程占用了一个cpu 95.6%之多
      

  8.   

    然后在db1中建立到db2的dblink,DL_db2; 
    然后db1中执行insert into test@DL_db2 select * from test where id = %d; 
    总共有几万条记录,执行了2万左右后,就会出现每条insert语句花费50-90秒左右时间; 
    但是每条都能执行成功,why?方法相当多:
    1.在db2中建立到db1的dblink,DL_db1; 
    然后db2中执行insert into test select * from test@DL_db1 where id = %d; 2.如果目标表中原来没有记录,可以考虑用copy from ..... to..... create tablename using 的办法,减少日志的生成,可以成倍的提高效率。
      

  9.   

    这个就是使用dblink的坏处,你每次插入一条语句就要使用一次dblink,也就是说要进行一次远程数据库的访问,这样的Oracle性能肯定会下降的!
    给你一个方法吧用dblink将数据复制本地库的临时表
    然后再对临时表做你的操作,速度就快了
      

  10.   

    这个应该不是dblink的问题,因为是在insert了大约1万左右才出现的;
    14楼的方法也不可行,已经测试了
      

  11.   

    现在问题可以归结为 数据库本身的问题;查了一下v$sql发现每个sql花费时间都挺大的,但是发现当时并没有太多的业务;
    现在每秒也就5个左右insert;但是却占用了一个cpu
      

  12.   

    你在1中建立一个视图v_test,然后
    insert into test@DL_db2 select * from v_test where id = %d; 
    看看会不会快呀(瞎猜,我也没试过)