9

我有一个这样的sql:

Insert into A
Select * from B;

现在我希望它并行运行。我的问题是并行化插入或选择或两者兼而有之?看到下面的sql,你能告诉我哪个是正确的或者哪个性能最好。我没有 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;

谢谢!

4

2 回答 2

14

并行化 theINSERT和 theSELECT是最快的。

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

您肯定会想要自己测试它,尤其是要找到最佳的并行度。围绕 Oracle 并行执行有很多神话,甚至手册有时也大错特错

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

alter session enable parallel dml;
insert /*+ append parallel(6) */ into A select * from B;
  1. 您总是希望首先启用并行 dml。
  2. parallel(6)使用语句级并行,而不是对象级并行。这是 11gR2 的一项功能,可让您轻松并行运行所有内容,而无需担心对象别名或访问方法。对于 10G,您将不得不使用多个提示。
  3. 通常append不需要提示。如果您的 DML 并行运行,它将自动使用直接路径插入。但是,如果您的语句被降级为串行语句,例如如果没有可用的并行服务器,那么append提示可能会产生很大的不同。
于 2012-05-03T04:01:04.047 回答
1

您不需要 DBA 特权来运行解释计划。我相信 SELECT_CATALOG 是正确的特权。

于 2012-05-03T09:45:27.970 回答