关于Oracle并行插入性能

mzmfm0qo  于 2022-11-03  发布在  Oracle
关注(0)|答案(2)|浏览(323)

我有一个这样的sql:

Insert into A
Select * from B;

现在我想让它并行运行。我的问题是并行化插入或选择,还是两者都并行化?看下面的sql,你能告诉我哪个是正确的,哪个性能最好吗?我没有dba权限,所以我不能检查它的执行计划。
1)Insert into A select/*+ parallel(B 6) */ * 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;
谢谢你,谢谢你

jqjz2hbq

jqjz2hbq1#

同时并行化INSERTSELECT是最快的。
(If您有足够大的数据量,您有一个不错的服务器,一切都配置合理,等等。)
您肯定会想自己测试一下,尤其是要找到最佳的并行度。关于Oracle并行执行,有很多神话,甚至手册有时也是horribly wrong
在11gR2上,我建议您按如下方式运行语句:

alter session enable parallel dml;
insert /*+ append parallel(6) */ into A select * from B;

1.您总是希望首先启用并行DML。

  1. parallel(6)使用语句级并行,而不是对象级并行。这是11gR2的一项功能,使您可以轻松地并行运行所有内容,而不必担心对象别名或访问方法。对于10G,您必须使用多个提示。
    1.通常不需要append提示。如果DML并行运行,它将自动使用直接路径插入。但是,如果语句降级为串行,例如,如果没有可用的并行服务器,那么append提示就可以产生很大的不同。(使用append提示的建议假定您只关心最大性能。如果您不能使用直接路径写入(可能是因为您需要在插入期间立即恢复或修改表),那么您可能希望避免使用append提示,甚至使用noappend。)
lztngnrs

lztngnrs2#

运行解释计划不需要DBA权限。我认为SELECT_CATALOG是正确的权限。

相关问题