大家好,有个关于IO的问题请教各位,如下:表A有2000万数据,表A和表B都有downdate 日期型的索引把表A的数据插入到表B,现在有两种方式1、循环,每次6个小时把A表的数据写入到B表(使用downdate索引)
2、一次性把A表的数据插入到B表明显,方式2会快很多。但是当想把B表的数据读取出来,按每24小时循环处理时,发现主要是
Db file sequential read 的IO等待。(比如CPU 时间:50,Db file sequential read:700,共执行760)问题:Db file sequential read 是不是因为一次性把数据写入导致的,如果按方式1好象没有这种问题。
我查了B表的数据大概是平均存储5个数据文件中,但这些文件是放在D:上的,如果数据文件分开放在不同的分区(E:、F:)上会快些吗?

解决方案 »

  1.   

    1.一次sequential读取通常是单个块的读取,要看看你的sql语句
    2.如果不是物理磁盘的话没有效果的
      

  2.   

    如果是全表导入,不用索引应该更快。因为你给的条件比较少,如果是晚上空闲时间导入,那有Db file sequential read 的问题不大
      

  3.   

    sql 其实很简单,就是B表和一个小表c(几百条记录)外关联
    insert t(...)
    select ...
     where b.col3=c.col3(+)
       and b.col4=c.col4(+)
       and b.downdate>=:vdate
       and b.downdate< :vdate+1
     group by b.col1,b.col2查看实际的查询计划是用到downdate索引。会不会是因为在2000W表中,查一天的数据(10W)用索引会更慢。但是我试过用全表扫描也很慢。今天trace插入一天的数据,发现Db file sequential read的时间是 CPU时间的100倍
    共执行450s, CPU:40s,Db file sequential read:400s
    Db file sequential read 等待这么久会是什么原因造成的,有什么好的办法吗?
    数据库没有其它的用户,只有一个用户在运行。白天晚上都一样的