在同一个存储过程中,参数是地市,存储过程的主要作用是 输入地市 在地市的数据表 进行计算,里面有复杂的算法,不存在锁表问题,因为参数规定使用地市的表,数据量百万行,主要是有个字段是clob的,非常耗时,单个存储过程已经过优化目前10几分钟可以跑完,现在我同时运行三个(参数是3个地市,proc('beijing');  proc('shanghai');  proc('guangzhou'); ),耗时基本上12小时以上,而且貌似还服务器经常在跑的过程中自动重启了,初步判断是磁盘IO太高导致重启的,这种情况,如何优化,可以并行运行互不干扰呢?请教下

解决方案 »

  1.   

    引起 I/O busy 的原因有很多,主要有以下几方面:
      存储性能瓶颈:控制器不足、cache偏小,Cache设置不合理、I/O通道容量不足等。
      磁盘性能瓶颈:磁盘数量过少、使用了速度比较低的磁盘等
      使用了不合理的RAID模式。
      在使用RAID的情况下,存在I/O热点,多个热点文件使用同一个磁盘。
      异步I/O配置不正确
      数据库各种缓冲区设置不合理,缓冲命中率过低
      PGA的各种缓存设置过小,(对于Oracle 9i,在使用自动管理模式的情况下,PGA设置过小),导致大量的临时表空间操作
      重做日志存在性能瓶颈
      重做缓冲区设置不合理
      存在热点数据
      表空间碎片严重
      表和索引的存储参数不合理
      行迁移比较严重
      存在大量大表扫描的SQL
      SQL执行选择了不好的执行计划首先要找到原因,不能单纯的考虑并行问题~
      

  2.   

    这个还要考虑一下不同参数,要扫描的数据量是否一样(或大体上差不多一样)
    参数为 beijing 时,可能要扫描 1000W 数据,而参数为 shijiazhuang 时,只访问了 10W 条数据;