我有一个这样的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;
谢谢你,谢谢你
2条答案
按热度按时间jqjz2hbq1#
同时并行化
INSERT
和SELECT
是最快的。(If您有足够大的数据量,您有一个不错的服务器,一切都配置合理,等等。)
您肯定会想自己测试一下,尤其是要找到最佳的并行度。关于Oracle并行执行,有很多神话,甚至手册有时也是horribly wrong。
在11gR2上,我建议您按如下方式运行语句:
1.您总是希望首先启用并行DML。
parallel(6)
使用语句级并行,而不是对象级并行。这是11gR2的一项功能,使您可以轻松地并行运行所有内容,而不必担心对象别名或访问方法。对于10G,您必须使用多个提示。1.通常不需要
append
提示。如果DML并行运行,它将自动使用直接路径插入。但是,如果语句降级为串行,例如,如果没有可用的并行服务器,那么append
提示就可以产生很大的不同。(使用append
提示的建议假定您只关心最大性能。如果您不能使用直接路径写入(可能是因为您需要在插入期间立即恢复或修改表),那么您可能希望避免使用append
提示,甚至使用noappend
。)lztngnrs2#
运行解释计划不需要DBA权限。我认为SELECT_CATALOG是正确的权限。