ITPub博客

首页 > 数据库 > Oracle > [20241224]提示enable_parallel_dml光标不共享.txt

[20241224]提示enable_parallel_dml光标不共享.txt

原创 Oracle 作者:lfree 时间:2024-12-24 20:28:07 0 删除 编辑

[20241224]提示enable_parallel_dml光标不共享.txt

1.环境:
SCOTT@book01p> @ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

SCOTT@book01p> @ sqlhint enable_parallel_dml
SCOTT@book01p> @ pr
==============================
NAME                          : ENABLE_PARALLEL_DML
SQL_FEATURE                   : QKSFM_DML
CLASS                         : ENABLE_PARALLEL_DML
INVERSE                       : DISABLE_PARALLEL_DML
TARGET_LEVEL                  : 1
PROPERTY                      : 0
VERSION                       : 11.2.0.4
VERSION_OUTLINE               :
CON_ID                        : 0
PL/SQL procedure successfully completed.

2.测试:
SCOTT@book01p> CREATE TABLE empx AS SELECT * FROM emp WHERE 1=0;
Table created.

SCOTT@book01p> INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp;
14 rows created.

SCOTT@book01p> rollback ;
Rollback complete.

SCOTT@book01p> INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp;
14 rows created.

SCOTT@book01p> rollback ;
Rollback complete.

SCOTT@book01p> INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp;
14 rows created.

SCOTT@book01p> @hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
4253983228 g369cg3ysx8gw            2      41468      3956160932  fd8ea1fc  2024-12-24 16:04:37    16777219

SCOTT@book01p> rollback ;
Rollback complete.

--//执行3次.

SYS@book> @ sharepool/shp4  g369cg3ysx8gw 0
HANDLE_TYPE            KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD   KGLHDIVC KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
---------------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
child handle address   00000000616C9BB0 00000000616CB310 INSERT /*+ enable_parallel_dml */ INTO e          0          0          1 00000000616C73C0 00000000616CA938       8080      28320       5062     41462      41462 4253983228 g369cg3ysx8gw          0
child handle address   00000000616C6E20 00000000616CB310 INSERT /*+ enable_parallel_dml */ INTO e          0          0          0 00000000616C6C60 00000000616CADD0       8080      28320       5062     41462      41462 4253983228 g369cg3ysx8gw          1
child handle address   00000000616813F0 00000000616CB310 INSERT /*+ enable_parallel_dml */ INTO e          0          0          0 0000000061681230 00000000616817A0       8080      28320       5062     41462      41462 4253983228 g369cg3ysx8gw          2
parent handle address  00000000616CB310 00000000616CB310 INSERT /*+ enable_parallel_dml */ INTO e          0          0          1 00000000616CB150 00                     8128          0          0      8128       8128 4253983228 g369cg3ysx8gw      65535

--//每次执行光标不共享!!

SCOTT@book01p> @ share g369cg3ysx8gw
SQL_TEXT                       = INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp
SQL_ID                         = g369cg3ysx8gw
ADDRESS                        = 00000000616CB310
CHILD_ADDRESS                  = 00000000616C9BB0
CHILD_NUMBER                   = 0
REASON                         = <ChildNode><ChildNumber>0</ChildNumber><ID>24</ID><reason>Parallel DML Environment mismatch(1)</reason><size>2x4</size><cursorPdmlMode>1</cursorPdmlMode><sessPdmlModec>0</sessPdmlModec></ChildNode>
--------------------------------------------------
SQL_TEXT                       = INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp
SQL_ID                         = g369cg3ysx8gw
ADDRESS                        = 00000000616CB310
CHILD_ADDRESS                  = 00000000616C6E20
CHILD_NUMBER                   = 1
PDML_ENV_MISMATCH              = Y
REASON                         = <ChildNode><ChildNumber>1</ChildNumber><ID>24</ID><reason>Parallel DML Environment mismatch(1)</reason><size>2x4</size><cursorPdmlMode>1</cursorPdmlMode><sessPdmlModec>0</sessPdmlModec></ChildNode>
--------------------------------------------------
SQL_TEXT                       = INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp
SQL_ID                         = g369cg3ysx8gw
ADDRESS                        = 00000000616CB310
CHILD_ADDRESS                  = 00000000616813F0
CHILD_NUMBER                   = 2
PDML_ENV_MISMATCH              = Y
REASON                         =
--------------------------------------------------
PL/SQL procedure successfully completed.

SCOTT@book01p> @ unshare g369cg3ysx8gw
SQL_ID        NONSHARED_REASON                COUNT(*)
------------- ----------------------------- ----------
g369cg3ysx8gw PDML_ENV_MISMATCH                      2

SCOTT@book01p> column SQL_TEXT format a62
SCOTT@book01p> SELECT sql_id, sql_text, child_number, optimizer_env_hash_value  FROM   v$sql where sql_id='g369cg3ysx8gw';

SQL_ID        SQL_TEXT                                                       CHILD_NUMBER OPTIMIZER_ENV_HASH_VALUE
------------- -------------------------------------------------------------- ------------ ------------------------
g369cg3ysx8gw INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp             0                927111890
g369cg3ysx8gw INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp             1                927111890
g369cg3ysx8gw INSERT /*+ enable_parallel_dml */ INTO empx SELECT * FROM emp             2                927111890

--//OPTIMIZER_ENV_HASH_VALUE没有变化。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3058915/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969252