关于Oracle并行插入性能

Gar*_*ary 7 oracle oracle10g oracle11g

我有一个像这样的SQL:

Insert into A
Select * from B;
Run Code Online (Sandbox Code Playgroud)

现在我想让它并行运行.我的问题是并行插入或选择或两者?请参阅以下sqls,您能告诉我哪一个正确或哪个具有最佳性能.我没有dba权限,所以我无法检查其执行计划.

1) Insert /*+ parallel(A 6) */ into A select * from B;

2) Insert into A select/*+ parallel(B 6) */ * from B;

3) Insert /*+ parallel(A 6) */ into A select /*+ parallel(B 6) */ * from B;

谢谢!

Jon*_*ler 13

并行化INSERTSELECT最快.

(如果你有足够多的数据,你有一个不错的服务器,一切都是明智的配置,等等)

你肯定想自己测试一下,特别是找到最佳的并行度.围绕Oracle并行执行有很多神话,甚至手册有时也是非常错误的.

在11gR2上,我建议你像这样运行你的语句:

alter session enable parallel dml;
insert /*+ append parallel(6) */ into A select * from B;
Run Code Online (Sandbox Code Playgroud)
  1. 您始终要首先启用并行dml.
  2. parallel(6)使用语句级并行,而不是对象级并行.这是一个11gR2功能,允许您轻松地并行运行所有内容,而不必担心对象别名或访问方法.对于10G,您必须使用多个提示.
  3. 通常情况下,append提示不是必需的.如果您的DML并行运行,它将自动使用直接路径插入.但是,如果您的语句降级为serial,例如,如果没有可用的并行服务器,那么append提示可以产生很大的不同.

  • 值得注意的是,并行插入或直接路径串行插入(追加)会对表(或插入所发生的命名分区)进行独占锁定. (2认同)