暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用批号并行更新同一表

askTom 2017-10-23
303

问题描述

嗨,

我有这个声明,

创建表二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函数不禁止使用并行操作,例如

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论