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

Oracle 内存光标持续时间临时表。

askTom 2018-02-27
283

问题描述



我刚刚遇到了关于内存光标持续时间临时表的有趣文章:
https://oracle-big-data.blogspot.fi/2017/03/this-post-covers-one-of-new-sql.html

有人提到此功能可用于 “串行查询” 的12.2。
我们正在为DW环境使用自动并行性,该环境运行良好。
这些并行化的查询是否会从该功能中受益?
此功能是否更改并行查询以串行运行?

在Oracle 18c中是否对此进行了任何更改?

我还应该问什么 (关于这个)?

左侧

专家解答

目前它们是串行的,因为否则我们必须有一种方法来 * 共享 * 临时数据,以便所有奴隶都可以看到它。这意味着共享内存区域或临时段。我们目前选择后者 (用于并行)。

Will these parallelized queries benefit from this feature?

不完全是。虽然如果你检查我在这里最后的演示,你可以看到我们在推导执行计划方面使用相同的 “逻辑”-更多的是,我们需要将临时数据存储在每个人都可以访问的地方。

Does this feature change parallel queries to run serially ?

没有。

SQL> create table t nologging tablespace largets
  2  as select d.* from dba_Objects d,
  3   ( select 1 from dual connect by level <= 100 );

Table created.

SQL>
SQL>
SQL> select /*+ gather_plan_statistics */ owner, object_type, trunc(created,'YYYY') yr, count(*)
  2  from t
  3  group by grouping sets
  4  (
  5    (owner),
  6    (owner,object_type),
  7    (object_type,trunc(created,'YYYY')),
  8    (trunc(created,'YYYY')),
  9    (object_type)
 10  );

OWNER                          OBJECT_TYPE             YR          COUNT(*)
------------------------------ ----------------------- --------- ----------
HR                             TYPE                                     100
HR                             VIEW                                     100
...

490 rows selected.

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
SQL_ID  0mcu7kuqur48p, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ owner, object_type,
trunc(created,'YYYY') yr, count(*) from t group by grouping sets (
(owner),   (owner,object_type),   (object_type,trunc(created,'YYYY')),
 (trunc(created,'YYYY')),   (object_type) )

Plan hash value: 3954148600

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                   | Name                        | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  | Writes |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                            |                             |      1 |        |    490 |00:00:08.69 |     196K|    181K|  14372 |       |       |          |
|   1 |  TEMP TABLE TRANSFORMATION                  |                             |      1 |        |    490 |00:00:08.69 |     196K|    181K|  14372 |       |       |          |
|   2 |   LOAD AS SELECT (CURSOR DURATION MEMORY)   | SYS_TEMP_0FD9D660D_960F92A1 |      1 |        |      0 |00:00:05.06 |     167K|    153K|  14372 |  2068K|  2068K|          |
|   3 |    TABLE ACCESS FULL                        | T                           |      1 |   7905K|   7905K|00:00:00.87 |     153K|    153K|      0 |       |       |          |
|   4 |   LOAD AS SELECT (CURSOR DURATION MEMORY)   | SYS_TEMP_0FD9D660E_960F92A1 |      1 |        |      0 |00:00:01.82 |   14392 |  14373 |      0 |  1024 |  1024 |          |
|   5 |    SORT GROUP BY ROLLUP                     |                             |      1 |   1282 |    371 |00:00:01.82 |   14392 |  14373 |      0 | 27648 | 27648 |24576  (0)|
|   6 |     TABLE ACCESS FULL                       | SYS_TEMP_0FD9D660D_960F92A1 |      1 |   7905K|   7905K|00:00:00.48 |   14392 |  14373 |      0 |       |       |          |
|   7 |   MULTI-TABLE INSERT                        |                             |      1 |        |      0 |00:00:01.80 |   14428 |  14372 |      0 |       |       |          |
|   8 |    SORT GROUP BY ROLLUP                     |                             |      1 |     35 |    117 |00:00:01.80 |   14428 |  14372 |      0 |  6144 |  6144 | 6144  (0)|
|   9 |     TABLE ACCESS FULL                       | SYS_TEMP_0FD9D660D_960F92A1 |      1 |   7905K|   7905K|00:00:00.50 |   14428 |  14372 |      0 |       |       |          |
|  10 |    DIRECT LOAD INTO (CURSOR DURATION MEMORY)| SYS_TEMP_0FD9D660F_960F92A1 |      0 |        |      0 |00:00:00.01 |       0 |      0 |      0 |       |       |          |
|  11 |    DIRECT LOAD INTO (CURSOR DURATION MEMORY)| SYS_TEMP_0FD9D660E_960F92A1 |      0 |        |      0 |00:00:00.01 |       0 |      0 |      0 |       |       |          |
|  12 |   LOAD AS SELECT (CURSOR DURATION MEMORY)   | SYS_TEMP_0FD9D660E_960F92A1 |      1 |        |      0 |00:00:00.01 |       0 |      0 |      0 |  1024 |  1024 |          |
|  13 |    HASH GROUP BY                            |                             |      1 |      1 |      2 |00:00:00.01 |       0 |      0 |      0 |  1149K|  1149K|  491K (0)|
|  14 |     TABLE ACCESS FULL                       | SYS_TEMP_0FD9D660F_960F92A1 |      1 |     35 |     68 |00:00:00.01 |       0 |      0 |      0 |       |       |          |
|  15 |   VIEW                                      |                             |      1 |   1317 |    490 |00:00:00.01 |       0 |      0 |      0 |       |       |          |
|  16 |    VIEW                                     |                             |      1 |   1317 |    490 |00:00:00.01 |       0 |      0 |      0 |       |       |          |
|  17 |     UNION-ALL                               |                             |      1 |        |    490 |00:00:00.01 |       0 |      0 |      0 |       |       |          |
|  18 |      TABLE ACCESS FULL                      | SYS_TEMP_0FD9D660E_960F92A1 |      1 |   1282 |    422 |00:00:00.01 |       0 |      0 |      0 |       |       |          |
|  19 |      TABLE ACCESS FULL                      | SYS_TEMP_0FD9D660F_960F92A1 |      1 |     35 |     68 |00:00:00.01 |       0 |      0 |      0 |       |       |          |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


34 rows selected.

SQL> select /*+ gather_plan_statistics parallel */ owner, object_type, trunc(created,'YYYY') yr, count(*)
  2  from t
  3  group by grouping sets
  4  (
  5    (owner),
  6    (owner,object_type),
  7    (object_type,trunc(created,'YYYY')),
  8    (trunc(created,'YYYY')),
  9    (object_type)
 10  );

OWNER                          OBJECT_TYPE             YR          COUNT(*)
------------------------------ ----------------------- --------- ----------
HR                             TYPE                                     100
HR                             VIEW                                     100
...

490 rows selected.

SQL>
SQL>
SQL> @exp

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
SQL_ID  1pmucckvxxywq, child number 1
-------------------------------------
select /*+ gather_plan_statistics parallel */ owner, object_type,
trunc(created,'YYYY') yr, count(*) from t group by grouping sets (
(owner),   (owner,object_type),   (object_type,trunc(created,'YYYY')),
 (trunc(created,'YYYY')),   (object_type) )

Plan hash value: 4262997987

---------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                  | Name                        | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
---------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                           |                             |      1 |        |    490 |00:00:04.32 |    1011 |       |       |          |
|   1 |  TEMP TABLE TRANSFORMATION                 |                             |      1 |        |    490 |00:00:04.32 |    1011 |       |       |          |
|   2 |   PX COORDINATOR                           |                             |      1 |        |      4 |00:00:02.23 |     261 | 73728 | 73728 |          |
|   3 |    PX SEND QC (RANDOM)                     | :TQ10000                    |      0 |   7905K|      0 |00:00:00.01 |       0 |       |       |          |
|   4 |     LOAD AS SELECT (TEMP SEGMENT MERGE)    | SYS_TEMP_0FD9D6613_960F92A1 |      0 |        |      0 |00:00:00.01 |       0 |  2068K|  2068K| 2068K (0)|
|   5 |      PX BLOCK ITERATOR                     |                             |      0 |   7905K|      0 |00:00:00.01 |       0 |       |       |          |
|*  6 |       TABLE ACCESS FULL                    | T                           |      0 |   7905K|      0 |00:00:00.01 |       0 |       |       |          |
|   7 |   PX COORDINATOR                           |                             |      1 |        |      4 |00:00:01.09 |      27 | 73728 | 73728 |          |
|   8 |    PX SEND QC (RANDOM)                     | :TQ20001                    |      0 |   1282 |      0 |00:00:00.01 |       0 |       |       |          |
|   9 |     LOAD AS SELECT (TEMP SEGMENT MERGE)    | SYS_TEMP_0FD9D6614_960F92A1 |      0 |        |      0 |00:00:00.01 |       0 |  1040K|  1040K| 1040K (0)|
|  10 |      VIEW                                  |                             |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  11 |       SORT GROUP BY ROLLUP COLLECTOR       |                             |      0 |   1282 |      0 |00:00:00.01 |       0 | 27648 | 27648 |12288  (0)|
|  12 |        PX RECEIVE                          |                             |      0 |   1282 |      0 |00:00:00.01 |       0 |       |       |          |
|  13 |         PX SEND HYBRID HASH                | :TQ20000                    |      0 |   1282 |      0 |00:00:00.01 |       0 |       |       |          |
|  14 |          SORT GROUP BY ROLLUP DISTRIBUTOR  |                             |      0 |   1282 |      0 |00:00:00.01 |       0 |  4096 |  4096 | 2048  (0)|
|  15 |           HASH GROUP BY                    |                             |      0 |   1282 |      0 |00:00:00.01 |       0 |  1022K|  1022K| 1326K (0)|
|  16 |            PX BLOCK ITERATOR               |                             |      0 |   7905K|      0 |00:00:00.01 |       0 |       |       |          |
|* 17 |             TABLE ACCESS FULL              | SYS_TEMP_0FD9D6613_960F92A1 |      0 |   7905K|      0 |00:00:00.01 |       0 |       |       |          |
|  18 |   PX COORDINATOR                           |                             |      1 |        |      6 |00:00:00.92 |      29 | 73728 | 73728 |          |
|  19 |    PX SEND QC (RANDOM)                     | :TQ30002                    |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  20 |     MULTI-TABLE INSERT                     |                             |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  21 |      PX RECEIVE                            |                             |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  22 |       PX SEND ROUND-ROBIN                  | :TQ30001                    |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  23 |        VIEW                                |                             |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  24 |         SORT GROUP BY ROLLUP COLLECTOR     |                             |      0 |     35 |      0 |00:00:00.01 |       0 |  4096 |  4096 | 4096  (0)|
|  25 |          PX RECEIVE                        |                             |      0 |     35 |      0 |00:00:00.01 |       0 |       |       |          |
|  26 |           PX SEND HYBRID HASH              | :TQ30000                    |      0 |     35 |      0 |00:00:00.01 |       0 |       |       |          |
|  27 |            SORT GROUP BY ROLLUP DISTRIBUTOR|                             |      0 |     35 |      0 |00:00:00.01 |       0 |  4096 |  4096 | 2048  (0)|
|  28 |             HASH GROUP BY                  |                             |      0 |     35 |      0 |00:00:00.01 |       0 |  1079K|  1079K|   37M (0)|
|  29 |              PX BLOCK ITERATOR             |                             |      0 |   7905K|      0 |00:00:00.01 |       0 |       |       |          |
|* 30 |               TABLE ACCESS FULL            | SYS_TEMP_0FD9D6613_960F92A1 |      0 |   7905K|      0 |00:00:00.01 |       0 |       |       |          |
|  31 |      DIRECT LOAD INTO (TEMP SEGMENT MERGE) | SYS_TEMP_0FD9D6615_960F92A1 |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  32 |      DIRECT LOAD INTO (TEMP SEGMENT MERGE) | SYS_TEMP_0FD9D6614_960F92A1 |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  33 |   PX COORDINATOR                           |                             |      1 |        |      4 |00:00:00.02 |      26 | 73728 | 73728 |          |
|  34 |    PX SEND QC (RANDOM)                     | :TQ40001                    |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|  35 |     LOAD AS SELECT (TEMP SEGMENT MERGE)    | SYS_TEMP_0FD9D6614_960F92A1 |      0 |        |      0 |00:00:00.01 |       0 |  1040K|  1040K| 1040K (0)|
|  36 |      HASH GROUP BY                         |                             |      0 |      1 |      0 |00:00:00.01 |       0 |  1149K|  1149K|  468K (0)|
|  37 |       PX RECEIVE                           |                             |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|  38 |        PX SEND HASH                        | :TQ40000                    |      0 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|  39 |         HASH GROUP BY                      |                             |      0 |      1 |      0 |00:00:00.01 |       0 |  1149K|  1149K|  469K (0)|
|  40 |          PX BLOCK ITERATOR                 |                             |      0 |     35 |      0 |00:00:00.01 |       0 |       |       |          |
|* 41 |           TABLE ACCESS FULL                | SYS_TEMP_0FD9D6615_960F92A1 |      0 |     35 |      0 |00:00:00.01 |       0 |       |       |          |
|  42 |   PX COORDINATOR                           |                             |      1 |        |    490 |00:00:00.02 |      40 | 73728 | 73728 |          |
|  43 |    PX SEND QC (RANDOM)                     | :TQ50000                    |      0 |   1317 |      0 |00:00:00.01 |       0 |       |       |          |
|  44 |     VIEW                                   |                             |      0 |   1317 |      0 |00:00:00.01 |       0 |       |       |          |
|  45 |      VIEW                                  |                             |      0 |   1317 |      0 |00:00:00.01 |       0 |       |       |          |
|  46 |       UNION-ALL                            |                             |      0 |        |      0 |00:00:00.01 |       0 |       |       |          |
|  47 |        PX BLOCK ITERATOR                   |                             |      0 |   1282 |      0 |00:00:00.01 |       0 |       |       |          |
|* 48 |         TABLE ACCESS FULL                  | SYS_TEMP_0FD9D6614_960F92A1 |      0 |   1282 |      0 |00:00:00.01 |       0 |       |       |          |
|  49 |        PX BLOCK ITERATOR                   |                             |      0 |     35 |      0 |00:00:00.01 |       0 |       |       |          |
|* 50 |         TABLE ACCESS FULL                  | SYS_TEMP_0FD9D6615_960F92A1 |      0 |     35 |      0 |00:00:00.01 |       0 |       |       |          |
---------------------------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   6 - access(:Z>=:Z AND :Z<=:Z)
  17 - access(:Z>=:Z AND :Z<=:Z)
  30 - access(:Z>=:Z AND :Z<=:Z)
  41 - access(:Z>=:Z AND :Z<=:Z)
  48 - access(:Z>=:Z AND :Z<=:Z)
  50 - access(:Z>=:Z AND :Z<=:Z)

Note
-----
   - automatic DOP: Computed Degree of Parallelism is 2


79 rows selected.

SQL>


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论