问题描述
嗨,
我有这个声明,
创建表二nologging parallel 15为
选择a,b,c,pkg_xyz(l,m,n) d
从一个;
如您所见,select查询中有一个包调用。
表1中有700万行。
执行大约需要3.5小时。正在通过sqlplus从shell脚本调用它。
我需要优化相同的。
我可以使用NTILE进行批处理,然后尝试诱导一些并行性。我可以通过调用pkg_xyz来计算值d并更新该值。
假设我通过NTILE进行了10个批次,现在如何基于batch_num启动10个单独的更新语句以作用于同一张表上?
我有这个声明,
创建表二nologging parallel 15为
选择a,b,c,pkg_xyz(l,m,n) d
从一个;
如您所见,select查询中有一个包调用。
表1中有700万行。
执行大约需要3.5小时。正在通过sqlplus从shell脚本调用它。
我需要优化相同的。
我可以使用NTILE进行批处理,然后尝试诱导一些并行性。我可以通过调用pkg_xyz来计算值d并更新该值。
假设我通过NTILE进行了10个批次,现在如何基于batch_num启动10个单独的更新语句以作用于同一张表上?
专家解答
不知道你在问什么。PL/SQL函数不禁止使用并行操作,例如
这很大程度上取决于你的PL/SQL函数包含的内容,以及它是否是并行化的合适候选者,但这听起来更像是调整包内正在发生的事情。
SQL> create or replace 2 function my_func(p_in varchar2) return varchar2 is 3 begin 4 return lower(p_in); 5 end; 6 / Function created. SQL> SQL> create table t1 parallel 8 as 2 select t.owner, my_func(t.owner) f 3 from t; Table created. SQL> SQL> SQL> explain plan for 2 create table t1 parallel 8 as 3 select t.owner, my_func(t.owner) f 4 from t; Explained. SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Plan hash value: 550883001 ---------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | ---------------------------------------------------------------------------------------------------------------------------- | 0 | CREATE TABLE STATEMENT | | 7840K| 44M| 6081 (1)| 00:00:01 | | | | | 1 | PX COORDINATOR | | | | | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10000 | 7840K| 44M| 5753 (1)| 00:00:01 | Q1,00 | P->S | QC (RAND) | | 3 | LOAD AS SELECT (HYBRID TSM/HWMB)| T1 | | | | | Q1,00 | PCWP | | | 4 | OPTIMIZER STATISTICS GATHERING | | 7840K| 44M| 5753 (1)| 00:00:01 | Q1,00 | PCWP | | | 5 | PX BLOCK ITERATOR | | 7840K| 44M| 5753 (1)| 00:00:01 | Q1,00 | PCWC | | | 6 | TABLE ACCESS FULL | T | 7840K| 44M| 5753 (1)| 00:00:01 | Q1,00 | PCWP | | ---------------------------------------------------------------------------------------------------------------------------- Note ----- - Degree of Parallelism is 8 because of table property 17 rows selected. SQL>
这很大程度上取决于你的PL/SQL函数包含的内容,以及它是否是并行化的合适候选者,但这听起来更像是调整包内正在发生的事情。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




