如何提高Oracle exp/imp的速度?

    在用Oracle的exp/imp工具时, 常常有人嫌它忙, 这个两个工具是比较慢, 除了用比较大的buffer参数外, 还是有办法可以加快的. 在exp时, 可以考虑更改表的并行度(ALTER TABLE xxx PARALLEL 4), 或者更改exp进程的Multiple Block Read参数的值.

SELECT SID, SERIAL# FROM V$SESSION WHERE PROGRAM LIKE 'exp%';
exec dbms_system.set_int_param_in_session( sid, serial#,
                'db_file_multiblock_read_count', 128);
exec dbms_system.set_bool_param_in_session( sid, serial#,
                '_serial_direct_read', true);

    在imp时, 没有什么办法可以提高它的速度, 但如果imp过程中包含了索引, 则可以不导入索引和约束(Primary或Unique), 而改为人工来创建. 如果不想这么麻烦呢, 也可以通过更改Session一级的参数微调一下.

SELECT SID, SERIAL# FROM V$SESSION WHERE PROGRAM LIKE 'imp%';
exec dbms_system.set_int_param_in_session( sid, serial#,
                'db_file_multiblock_read_count', 128);
exec dbms_system.set_int_param_in_session( sid, serial#,
                'sort_area_size', 104857600);
exec dbms_system.set_int_param_in_session( sid, serial#,
                'sort_area_retained_size', 104857600);
exec dbms_system.set_int_param_in_session( sid, serial#,
                'sort_multiblock_read_count', 128);

    更改表的并行度的方法不是很好, 但是Oracle好象没有提供强制其他会话Parallel运行的接口, 用Logon触发器, 还是觉得太麻烦了一些, 不明白Oracle为什么不给exp工具加个HINT或Parallel命令行选项.

留言 (6)

在本本上测试multiblock read的作用, 导出62MB数据所用的时间, 单位秒.

       M128   M16
test0     9    16
test1     9    12
test2     9    11
test3     9    15
test4     9    11

需要设置sort_area_size吗?应该使用的undo表空间吧?有一次导入10G的数据,undo表空间狂涨。。。

那是因为你设了自动扩展, Undo表空间会尽量保留Retention Time指定的时间内产生的原值, 因为imp时, 数据变更多, 所以才会变大的.
实际是指定commit=y, 加上不让undo自动扩展就可以了.

恩,当时发现这个问题的时候,已经在导入中,就没有去做处理。反正磁盘足够大。导入完毕后,重新修改了undo空间。

刚刚意思表达错了,你修改sort_area_size的目的是什么?
如果利用了PGA,就不需要sort_area_size了吧

MTS下还是会用SORT_AREA_SIZE的. 让数据文件自动扩展是一个很不好的习惯.

恩,一般我建库都是不会自动扩展,可是客户比较讨厌,总是喜欢自动扩展,而且要求设置为自动扩展,因为他们认为他们的磁盘空间足够,不想每天去看文件是否满了,是否需要手工扩展,怎么说服都没用啊,唉。

更有竞争对手会趁机迎合客户,大谈自动扩展的好处,晕菜啊

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • I'll leave for London if I finish my work today.
  • 如果我今天完成工作, 我就会去伦敦.
  • I'll work for 5 years and then go back to school.
  • 我会工作五年, 然后会学校.
  • He will become a writer if he goes on doing well in writing.
  • 如果他仍写的这么好的话, 他将成为一个作家.
  • I hope he will meet me at the airport.
  • 我希望他能到机场接我.
  • I'm thinking of quitting the job.
  • 我在考虑辞职.