Sqlloader导数据进数据库时间过长或卡住原因探讨及解决办法

起因是每天10点由一个数据库通过sqlplus取出数据生成txt,通过sqlloader导入另一个数据库,平常sqlloader都是很快的,有一天突然就跑不动了,由于sqlloader采用的是直接路径加载(direct=true) ,在加载过程中索引失效了,直到加载结束才会重新维护索引。直接导致了第二天有查询到这张表的存储过程全部卡住了,这张表是一张上亿数据的流水表,结果可想而知。。。。。。。。。
Sqlloader导数据进数据库时间过长或卡住原因探讨及解决办法_第1张图片

原因(待明确)

1.DBA跟我说可能是其它的应用往里读取和写入数据,资源抢占问题造成的,还可以看看是否出现了锁和等待(我感觉DBA就是在划水,自己也不知道,说的和没说一样)
2.上图经过时间是17个小时,而CPU时间却很少,是不是有其他抢占CPU资源导致?

解决办法

1.当时无法确定在需要多少时间才能完成,是上报了DBA杀了所有的等待会话,包括Sqlloader和存储过程,因为是强行结束,索引处于失效状态,还要重建索引,上亿数据的表重建索引是有点耗时的。

2.原来每天直接往一张上亿的流水表sqlloader几十万的数据,而且这表是许多存储过程依赖的源表,风险不是一般的大。现在修改为往一张临时表中sqlloader,临时表数据都是清空在导入,再通过存储过程往目标表每1000条导入一次,这样风险降到最低了。同时对后续数据处理的影响降到最小。

如果上面有错误和不足的地方,请各位大佬不吝赐教。

你可能感兴趣的:(1,啊21)