记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。
imp的buffer和commit分析  

Impcommitbuffer分析:

Impcommit影响:

impcommit主要用于大表数据插入时减少回滚段的压力,以免出现长时间导入而出现的回滚段过久ora-01555,结合buffer设置则能按照buffer的大小进行分批提交,可以有效的减轻undo压力。

但是如果对于插入loblongrefrowid等字段时设置commit=y则会逐条commit,我们都清楚对于批量插入数据逐条commit会降低性能,所以这里需要依据表中的具体信息。

而且还存在一个因素则是结合buffer区大小批量commit提交时,如果出现表空间,连接丢失等问题导致imp失败,则可能只提交一批数据,此时带来的影响还是很大的,即使再次插入根据主键筛选依然会出现大量的错误,而imp对这些错误的排查则会降低大量性能,这也可能是oracle默认的imp工具中commit=n缘由吧。

Impbuffer效果

生产环境下,oracle 9Isga大概8Gpga大概6g,需要导入一个2.7g以上的大表到成产库中,

由于是同事着手运用imp工具的默认buffer=30K,用时大概一个小时还没有结果,

考虑到pga还是很大的,跟同事商议加上buffer=409600000设置buffer大概400M的,15分钟内imp完成。

当然运用impdp然后运用parallel=n效率当然更加理想了!


首先建好了表结构,再导入数据


imp user1/user1 tables=t1 file=exp_1.dmp log=imp_t1.log ignore=y  buffer=102400000 commit=y statistics=none

statistics=none 参数,不使用统计信息,不然,会导致锁表。
ignore=y    无视表存在错误。

将buffer 缓存设置成100M,如果我的SGA与配置足够好。可以加在buffer。
注意使用之前要加大undo表空间,会爆满。满后,会导致失败。

commit=y  导入一定数据量会自动提交。
如果数据量大,提交会频繁,请导入数据之前,将自己的redo 文件值修改大些。以免提交频繁,导致出错。


imp user1/user1 tables=t1 file=exp_1.dmp log=imp_t1.log ignore=y statistics=none

如果使用以上命令,就会使用undo表空间,会爆满。再使用之前加大undo表空间,不然满后,会导致失败。



转载请标明出处【imp imp的buffer和commit 使用undo与redo】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论