救命,如何提高Oracle数据进库的效率???(200分)

  • 主题发起人 主题发起人 杨深
  • 开始时间 开始时间

杨深

Unregistered / Unconfirmed
GUEST, unregistred user!
有150万数据要进库,要求速度为每分钟一万以上.
现在:
插入主表中用时20-30小时.
插入临时表中为5个小时.
但临时表的数据每天要导入主表.
主表有主键及索引.
请问如何提高速度?
 
插入之前删除是索引,然后重建索引,同时分段提交
 
0、数据库调整到最优化状态
1、删除索引
2、禁用约束
3、使用存储过程
4、增加回滚段空间
5、定时提交(但千万不要太频繁)

150万? 相信不超过1小时可以搞定
 

0、数据库调整到最优化状态
暂时不清楚
1、删除索引
临时表没有索引
2、禁用约束
临时表没有约束
3、使用存储过程
是不是在临时表向主表插入时用?我的主表的数据要保存6个月,
大概有2亿多条数据重插入时去除索引??还是不去。
4、增加回滚段空间
大概要多少?现在我的是260M
5、定时提交(但千万不要太频繁)
现在是每100条记录提交一次。

表的记录大概是80字节
我现在进临时表时是5个小时。还没有进主表。惨,请帮忙!!!!!!!!!!!!!!!!
 
是删除主表索引吧。。
数据插入表中
如果有索引和约束
对数据得插入速度会有一定得影响的
先去掉索引,约束
数据导入后再建立回去。。。
 
3、使用存储过程
是不是在临时表向主表插入时用?

大概有2亿多条数据重插入时去除索引??还是不去。
一定要先把主表的索引、约束去掉再插入数据,效率会差上十几倍的
插入完毕再重建索引,Enable约束

4、增加回滚段空间
大概要多少?现在我的是260M
是我没说清楚,你应该创建一个大的回滚段,然后强制插入事务使用这个回滚段

5、定时提交(但千万不要太频繁)
现在是每100条记录提交一次。
太频繁了,每十万条记录或更多(视你的回滚段大小)提交一次。
 
去掉约束的话。
那数据重复性怎么来检查?
用select 会很慢吧。
我的文件是小文件,每个文件大概是1000条记录,
在一定时间内来到要求4 小时进库完成。
所以只能每个文件提交一次,不能十几万提交一次。
我用的是AIX170用数据库服务器。
 
能不能把一个长字符串(100K)作为一个参数传给存储过程?
发现在后台进库很快,我现在用的是客户端的OCI开发包。不是
在服务器端进库。
 
看看是不是客户端到服务器的数据管道问题
这么大的数据量,建议采用高级服务器
建议采用快速写入镜像方式
建议更改数据结构
建议更改业务模式
 
你用OCI来插入数据的话最好使用Oracle的Array DML功能,这样效率能大大提高
看你后面的意思好象是数据源是文本文件,那最好使用Oracle的SQL Loader来装载数据
至于你说的数据重复问题, 你难道是想在插入的时候解决?那可能效率更低,可能先
把数据装载再用SQL把重复数据滤取出来,这样效率会高一些。比如唯一性检查,那是靠
数据库的唯一性索引来实现的,如果你保留这个索引,那插入数据的效率就大大降低。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
730
SUNSTONE的Delphi笔记
S
后退
顶部