我需要用ODI从一个SQlServer数据库的一张表中抽取2亿条左右的数据到Oracle数据库中,目前运行映射已经一天多了,才加载了5千多万条数据。通过Enterprise Manager找到执行insert语句的会话,发现是和LGWR发生了争用,等待事件是“log file sync”,当前等待类是“Commit”。
目前我收集到如下一些信息,麻烦前辈们帮忙看下问题出在哪里。
执行
select se.sid,s.username,se.event,se.total_waits,se.time_waited,se.average_wait
from v$session s,v$session_event se
where s.username is not null
and se.sid=s.sid and s.status='ACTIVE' and se.event like 'log file %'
结果如下,算了一下,居然有30多个小时都是在等“log file sync”事件
执行
select * from v$system_event where event in
('buffer busy waits','db file sequential read',
'db file scattered read','enqueue',
'free buffer waits','latch free',
'log file parallel write','log file sync');
结果如下。这个是不是可以通过“log file parallel write”事件的等待时间说明磁盘io有问题?另外查询了一下sql的执行统计信息,如下图,没看太明白...是不是说每insert 30条数据就commit一次?

解决方案 »

  1.   

    嗯,你的目标数据库,也就是oracle性能有问题,似乎是IO有问题。
    差不多30条左右,但不一定是insert。
      

  2.   

    谢谢楼上兄弟的回复,能不能分析下是硬件的性能问题,还是Oracle的配置问题呢?
    是我问的问题太偏门了么??还是CSDN的人越来越少了?
      

  3.   

    可以先看看硬件问题:
    vmstat 3
    iostat -dx 3
    如果是aix:
    iostat 3多贴几条信息。
      

  4.   

    这两个命令式Linux的吧??我用的是Windows 2008 R2
    这两个命令式Linux的吧??我用的是Windows server 2008 R2
      

  5.   

    哦,oracle跑在win上的,还真不多见,抱歉。
    那就只能用win的perf mon了,cpu,io相关的计数器。例如:
    cpu:%user time 
        %idle time
    phisicaldisk:%disk read time;%disk write time;%idle time;current disk queue length;
                 disk read bytes/sec;disk reads/sec;disk write bytes/sec;disk writes/sec;
     
      

  6.   

    哦??Windows底下还有这么个工具啊。谢谢指点,结贴给分。