oracle采用sqlldr入库堆积怎么办?

sqlldr入库是常用方式之一,也是最常见的。

我已经处理类似案例多次了,但是今天这次耗时最长。

 

 

分析原因:

1.入库报错(比如:没有分区,入库值的精度不对,列名少了一个等等)。

2.io压力大(索引单块读比较多,db file sequential read)

3.机器内存足够,但是oracle的sga不够,或者说sga_target pga_aggrent_target  memry_xxxxx设置不对。

4.sqlldr本身进程多,多数为hang 的进程。

5.查看网络是否完好,SQL*Net more data from client

 

 

 

 

解决方案:

1.分析awr检查数据库压力,top5看看

Top 5 Timed Foreground Events

Event Waits Time(s) Avg wait (ms) % DB time Wait Class
db file sequential read 1,484,413 14,383 10 51.51 User I/O
DB CPU   12,478   44.69  
SQL*Net more data from client 5,655,790 444 0 1.59 Network
cursor: pin S wait on X 5,343 91 17 0.32 Concurrency
enq: CR - block range reuse ckpt 8,641 70 8 0.25

Other

2.看看alert日志,看看是不是因为数据库的参数限制了入库进程。比如我上次遇到process满了,进程不够。

 或者报错,导致数据库不可用,所以参数堆积。

3.禁用索引,降低db file sequential read。

4.ethtool 检查是否千兆网卡。

 

 

 

注:逐渐发现问题后,再补充

 

你可能感兴趣的:(oracle采用sqlldr入库堆积怎么办?)