Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

84

积分

1

好友

27

主题
1#
发表于 2013-11-28 13:02:39 | 查看: 5659| 回复: 16
主机:1个8核心 CPU,lvm(2硬盘),16G 内存
数据库版本以及环境(单机):
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE        11.2.0.1.0        Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> show parameter parallel
NAME                                     TYPE                    VALUE
------------------------------------ ---------------------- ------------------------------
fast_start_parallel_rollback             string                    LOW
parallel_adaptive_multi_user             boolean                    TRUE
parallel_automatic_tuning             boolean                    FALSE
parallel_degree_limit                     string                    CPU
parallel_degree_policy                     string                    MANUAL
parallel_execution_message_size      integer                    16384
parallel_force_local                     boolean                    FALSE
parallel_instance_group              string
parallel_io_cap_enabled              boolean                    FALSE
parallel_max_servers                     integer                    160
parallel_min_percent                     integer                    0
parallel_min_servers                     integer                    0
parallel_min_time_threshold             string                    AUTO
parallel_server                      boolean                    FALSE
parallel_server_instances             integer                    1
parallel_servers_target              integer                    64
parallel_threads_per_cpu             integer                    2
recovery_parallelism                     integer                    0
奇怪的现象:SQL 不走并行。语句如下。
INSERT INTO /*parallel (t2,6)*/musicdw.songcrosssell_cbf3_201306_01cm t2
   SELECT /*+parallel (tt,6)*/tt.msisdn_id,tt.copyright_id,tt.cnt0,tt.cnt1
     FROM (SELECT /*+parallel (t1,6)*/t1.msisdn_id,
                  t1.copyright_id,
                  t1.cnt0,
                  t1.cnt1,
                  ROW_NUMBER ()
                     OVER (PARTITION BY t1.msisdn_id ORDER BY t1.msisdn_id)
                     seq_id
             FROM (SELECT /*+parallel (a,6),(b,6)*/a.msisdn_id,
                          b.copyright_id,
                          chenqy.random_num ('nn') cnt0,
                          chenqy.random_num ('nn') cnt1
                     FROM musicdw.user_list a
                          JOIN musicdw.song_list b ON 1 = 1) t1) tt
    WHERE     tt.seq_id < MOD (tt.msisdn_id, 211)
          AND tt.seq_id > MOD (tt.msisdn_id, 29);
甚至对表启用parallel 但是运行sql后看不到并行状态(v$px_session,linux 进程中无相关并行信息)。但是执行计划中是走并行的。
SQL> explain plan for INSERT INTO /*parallel (t2,6)*/musicdw.songcrosssell_cbf3_201306_01cm t2
   SELECT /*+parallel (tt,6)*/tt.msisdn_id,tt.copyright_id,tt.cnt0,tt.cnt1
     FROM (SELECT /*+parallel (t1,6)*/t1.msisdn_id,
                  t1.copyright_id,
                  t1.  2    3    4    5  cnt0,
                  t1.cnt1,
                  ROW_NUMBER ()
                     OVER (PARTITION BY t1.msisdn_id ORDER BY t1.msisdn_id)
                     seq_id
             FROM (SELECT /*+parallel (a,6),(b,6)*/a.msisdn_id,
                         6    7    8    9   10   11     b.copyright_id,
                          chenqy.random_num ('nn') cnt0,
                          chenqy.random_num ('nn') cnt1
                     FROM musicdw.user_list a
                          JOIN musicdw.song_list b ON 1 = 1) t1) tt
    WHERE  12   13   14   15   16      tt.seq_id < MOD (tt.msisdn_id, 211)
          AND tt.seq_id > MOD (tt.msisdn_id, 29); 17  
SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2787080057

-----------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                               | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |    TQ        |IN-OUT| PQ Distrib |
-----------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT              |                                |  4883M|    17T|       |    14M  (2)| 74:08:13 |        |      |            |
|   1 |  LOAD TABLE CONVENTIONAL      | SONGCROSSSELL_CBF3_201306_01CM |       |       |       |            |               |        |      |            |
|   2 |   PX COORDINATOR FORCED SERIAL|                                |       |       |       |            |               |        |      |            |
|   3 |    PX SEND QC (RANDOM)              | :TQ10002                       |  4883M|    17T|       |    14M  (2)| 74:08:13 |  Q1,02 | P->S | QC (RAND)  |
|*  4 |     VIEW                      |                                |  4883M|    17T|       |    14M  (2)| 74:08:13 |  Q1,02 | PCWP |            |
|   5 |      WINDOW SORT              |                                |  4883M|   118G|   145G|    14M  (2)| 74:08:13 |  Q1,02 | PCWP |            |
|   6 |       PX RECEIVE              |                                |  4883M|   118G|       |   325K  (2)| 01:37:39 |  Q1,02 | PCWP |            |
|   7 |        PX SEND HASH              | :TQ10001                       |  4883M|   118G|       |   325K  (2)| 01:37:39 |  Q1,01 | P->P | HASH            |
|   8 |         MERGE JOIN CARTESIAN  |                                |  4883M|   118G|       |   325K  (2)| 01:37:39 |  Q1,01 | PCWP |            |
|   9 |          BUFFER SORT              |                                |       |       |       |            |               |  Q1,01 | PCWC |            |
|  10 |           PX RECEIVE              |                                |  1000 | 13000 |       |     2         (0)| 00:00:01 |  Q1,01 | PCWP |            |
|  11 |            PX SEND BROADCAST  | :TQ10000                       |  1000 | 13000 |       |     2         (0)| 00:00:01 |  Q1,00 | P->P | BROADCAST  |
|  12 |             PX BLOCK ITERATOR |                                |  1000 | 13000 |       |     2         (0)| 00:00:01 |  Q1,00 | PCWC |            |
|  13 |              TABLE ACCESS FULL| SONG_LIST                       |  1000 | 13000 |       |     2         (0)| 00:00:01 |  Q1,00 | PCWP |            |
|  14 |          BUFFER SORT              |                                |  4883K|    60M|       |    14M  (2)| 74:08:13 |  Q1,01 | PCWP |            |
|  15 |           PX BLOCK ITERATOR   |                                |  4883K|    60M|       |   221         (3)| 00:00:04 |  Q1,01 | PCWC |            |
|  16 |            TABLE ACCESS FULL  | USER_LIST                       |  4883K|    60M|       |   221         (3)| 00:00:04 |  Q1,01 | PCWP |            

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

   4 - filter("TT"."SEQ_ID"<MOD("TT"."MSISDN_ID",211) AND "TT"."SEQ_ID">MOD("TT"."MSISDN_ID",29))

   - dynamic sampling used for this statement (level=2)

另一种奇怪的现象:如果单独执行SELECT /*+parallel (t1,6)*/t1.msisdn_id,
                  t1.copyright_id,
                  t1.cnt0,
                  t1.cnt1,
                  ROW_NUMBER ()
                     OVER (PARTITION BY t1.msisdn_id ORDER BY t1.msisdn_id)
                     seq_id
             FROM (SELECT /*+parallel (a,6),(b,6)*/a.msisdn_id,
                          b.copyright_id,
                          chenqy.random_num ('nn') cnt0,
                          chenqy.random_num ('nn') cnt1
                     FROM musicdw.user_list a
                          JOIN musicdw.song_list b ON 1 = 1) t1
执行计划:
SQL> explain plan for SELECT /*+parallel (t1,6)*/t1.msisdn_id,
                  t1.copyright_id,
                  t1.cnt0,
                  t1.cnt1,
                  ROW_NUMBER ()
                     OVER (PARTITION BY t1.msisdn_id ORDER BY t1.msisdn_id)
                    2    3    4    5    6    7     seq_id
             FROM (SELECT /*+parallel (a,6),(b,6)*/a.msisdn_id,
                          b.copyright_id,
                          chenqy.random_num ('nn') cnt0,
                          chenqy.random_num ('nn') cnt1
                     FROM m  8    9   10   11   12  usicdw.user_list a
                          JOIN musicdw.song_list b ON 1 = 1) t1 13  ;
SQL> select * from table(dbms_xplan.display());

Plan hash value: 1333373917

| Id  | Operation                    | Name        | Rows        | Bytes |TempSpc| Cost (%CPU)| Time        |    TQ  |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                |  4883M|   118G|        |    14M  (2)| 74:08:13 |         |        |             |
|   1 |  PX COORDINATOR             |                |        |        |        |             |                |         |        |             |
|   2 |   PX SEND QC (RANDOM)            | :TQ10002        |  4883M|   118G|        |    14M  (2)| 74:08:13 |  Q1,02 | P->S | QC (RAND)  |
|   3 |    WINDOW SORT                    |                |  4883M|   118G|   145G|    14M  (2)| 74:08:13 |  Q1,02 | PCWP |             |
|   4 |     PX RECEIVE                    |                |  4883M|   118G|        |   325K  (2)| 01:37:39 |  Q1,02 | PCWP |             |
|   5 |      PX SEND HASH            | :TQ10001        |  4883M|   118G|        |   325K  (2)| 01:37:39 |  Q1,01 | P->P | HASH             |
|   6 |       MERGE JOIN CARTESIAN  |                |  4883M|   118G|        |   325K  (2)| 01:37:39 |  Q1,01 | PCWP |             |
|   7 |        BUFFER SORT            |                |        |        |        |             |                |  Q1,01 | PCWC |             |
|   8 |         PX RECEIVE            |                |  1000 | 13000 |        |     2   (0)| 00:00:01 |  Q1,01 | PCWP |             |
|   9 |          PX SEND BROADCAST  | :TQ10000        |  1000 | 13000 |        |     2   (0)| 00:00:01 |  Q1,00 | P->P | BROADCAST  |
|  10 |           PX BLOCK ITERATOR |                |  1000 | 13000 |        |     2   (0)| 00:00:01 |  Q1,00 | PCWC |             |
|  11 |            TABLE ACCESS FULL| SONG_LIST |  1000 | 13000 |        |     2   (0)| 00:00:01 |  Q1,00 | PCWP |             |
|  12 |        BUFFER SORT            |                |  4883K|    60M|        |    14M  (2)| 74:08:13 |  Q1,01 | PCWP |             |
|  13 |         PX BLOCK ITERATOR   |                |  4883K|    60M|        |   221   (3)| 00:00:04 |  Q1,01 | PCWC |             |
|  14 |          TABLE ACCESS FULL  | USER_LIST |  4883K|    60M|        |   221   (3)| 00:00:04 |  Q1,01 | PCWP |             |
   - dynamic sampling used for this statement (level=2)
第二条语句就可以使用并行查询,很是奇怪不知道为何?
问题:为什么第一条语句不走并行?
在什么情况下SQL不会走并行?
希望热心的朋友帮忙看下,谢谢!
2#
发表于 2013-11-28 13:11:49
INSERT INTO /*parallel (t2,6)*/musicdw.songcrosssell_cbf3_201306_01cm t2

这里HINT 存在问题 应为 /*+ HINT */


and


enable parallel dml

如仍不成功 执行下面的action plan:

1、

alter session set "_px_trace"="compilation","execution","messaging";
alter session set events '10053 trace name context forever,level 1';

并执行你的SQL 需要触发硬解析

上传生成的TRACE

回复 只看该作者 道具 举报

3#
发表于 2013-11-28 13:24:05
小手真快,已经说全了,没啥补充的,O(∩_∩)O哈哈~。。。。。。

回复 只看该作者 道具 举报

4#
发表于 2013-11-28 13:43:53
Maclean Liu(刘相兵 发表于 2013-11-28 13:11
INSERT INTO /*parallel (t2,6)*/musicdw.songcrosssell_cbf3_201306_01cm t2

这里HINT 存在问题 应为 /*+ ...

如果是在一个select语句中,有多表关联,也有子查询,在每张表上都禁止使用并行,需要在每个select上加hint吗?

回复 只看该作者 道具 举报

5#
发表于 2013-11-28 13:53:42
hint 是有点儿问题,但不是hint的问题,因为表已经开了并行。 现在这样搞问题依旧。alter table musicdw.songcrosssell_cbf3_201306_01cm parallel 4;
alter table musicdw.song_list parallel 4;
alter table musicdw.song_list parallel 4;
alter session set "_px_trace"="low","compilation","low","execution","low","messaging";
alter session enable parallel dml;
alter session set events '10053 trace name context forever,level 1';
INSERT INTO musicdw.songcrosssell_cbf3_201306_01cm t2
   SELECT tt.msisdn_id,tt.copyright_id,tt.cnt0,tt.cnt1
     FROM (SELECT t1.msisdn_id,
                  t1.copyright_id,
                  t1.cnt0,
                  t1.cnt1,
                  ROW_NUMBER ()
                     OVER (PARTITION BY t1.msisdn_id ORDER BY t1.msisdn_id)
                     seq_id
             FROM (SELECT a.msisdn_id,
                          b.copyright_id,
                          chenqy.random_num ('nn') cnt0,
                          chenqy.random_num ('nn') cnt1
                     FROM musicdw.user_list a
                          JOIN musicdw.song_list b ON 1 = 1) t1) tt
    WHERE     tt.seq_id < MOD (tt.msisdn_id, 211)
          AND tt.seq_id > MOD (tt.msisdn_id, 29);
commit;

回复 只看该作者 道具 举报

6#
发表于 2013-11-28 14:06:12
为了方便测试,把数据量缩小,并修改了表名。语句去掉了hint。增加了并行。10053trace 文件在附件中。

musicdw1_ora_26887.rar

16.83 KB, 下载次数: 1169

回复 只看该作者 道具 举报

7#
发表于 2013-11-28 14:41:55
本帖最后由 anbob 于 2013-11-28 14:43 编辑

trace 中的执行计划
  1. ============
  2. Plan Table
  3. ============
  4. -------------------------------------------------+-----------------------------------+------
  5. | Id  | Operation                      | Name    | Rows  | Bytes | Cost  | Time      |  TQ  
  6. -------------------------------------------------+-----------------------------------+------
  7. | 0   | INSERT STATEMENT               |         |       |       |   504 |           |      
  8. | 1   |  LOAD AS SELECT                |         |       |       |       |           |      
  9. | 2   |   PX COORDINATOR FORCED SERIAL |         |       |       |       |           |      
  10. | 3   |    PX SEND QC (RANDOM)         | :TQ10002|   98K |  386M |   504 |  00:00:10 |:Q1002
  11. | 4   |     VIEW                       |         |   98K |  386M |   504 |  00:00:10 |:Q1002
  12. | 5   |      WINDOW SORT               |         |   98K | 2539K |   504 |  00:00:10 |:Q1002
  13. | 6   |       PX RECEIVE               |         |   98K | 2539K |   206 |  00:00:04 |:Q1002
  14. | 7   |        PX SEND HASH            | :TQ10001|   98K | 2539K |   206 |  00:00:04 |:Q1001
  15. | 8   |         MERGE JOIN CARTESIAN   |         |   98K | 2539K |   206 |  00:00:04 |:Q1001
  16. | 9   |          PX BLOCK ITERATOR     |         |   100 |  1300 |     2 |  00:00:01 |:Q1001
  17. | 10  |           TABLE ACCESS FULL    | BAK2    |   100 |  1300 |     2 |  00:00:01 |:Q1001
  18. | 11  |          BUFFER SORT           |         |  1000 |   13K |   502 |  00:00:10 |:Q1001
  19. | 12  |           BUFFER SORT          |         |       |       |       |           |:Q1001
  20. | 13  |            PX RECEIVE          |         |  1000 |   13K |     4 |  00:00:01 |:Q1001
  21. | 14  |             PX SEND BROADCAST  | :TQ10000|  1000 |   13K |     4 |  00:00:01 |      
  22. | 15  |              TABLE ACCESS FULL | BAK1    |  1000 |   13K |     4 |  00:00:01 |      
  23. -------------------------------------------------+-----------------------------------+------
复制代码

回复 只看该作者 道具 举报

8#
发表于 2013-11-28 15:00:07
SPM: statement not found in SMB
kxfrDefaultDOP
        DOP Trace -- compute default DOP
            # CPU       = 8
            Threads/CPU = 2 ("parallel_threads_per_cpu")
            default DOP = 16 (# CPU * Threads/CPU)
            default DOP = 16 (DOP * # instance)
            Default DOP = 16

**************************
Automatic degree of parallelism (ADOP)
**************************
Automatic degree of parallelism is disabled: Parameter.





_pga_max_size                       = 419420 KB
parallel_dml_mode                   = enabled
parallel_query_default_dop          = 16

启用了PARALLEL DML+ 执行计划为并行

回复 只看该作者 道具 举报

9#
发表于 2013-11-28 15:04:16
action plan1:

alter session set "_px_trace"="low","compilation","low","execution","low","messaging";
alter session set events '10053 trace name context forever,level 1';
ALTER SESSION FORCE PARALLEL DML PARALLEL 5;
ALTER SESSION FORCE PARALLEL QUERY PARALLEL 5;
执行SQL



action plan2:
另给出你INSERT表的完整DDL

回复 只看该作者 道具 举报

10#
发表于 2013-11-28 15:59:46
  CREATE TABLE "MUSICDW"."SONGCROSSSELL_CBF3_201306_01CM"
   (        "MSISDN" NUMBER(14,0),
        "COPYRIGHT_ID" VARCHAR2(20),
        "CNT0" NUMBER,
        "CNT1" NUMBER
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING
  STORAGE(INITIAL 163840 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_ODS_LOG"
  PARALLEL 4 ;
----------------------------------------------------------------------------------------------------------------------------------
   CREATE TABLE "MUSICDW"."SONG_LIST"
   (        "COPYRIGHT_ID" NUMBER
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING
  STORAGE(INITIAL 163840 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_ODS_LOG"
  PARALLEL 4 ;
--------------------------------------------------------------------------------------------------------
  CREATE TABLE "MUSICDW"."USER_LIST"
   (        "MSISDN_ID" NUMBER
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255  NOLOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_ODS_LOG"
  PARTITION BY HASH ("MSISDN_ID")
(PARTITION "P1"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P2"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P3"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P4"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P5"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P6"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P7"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P8"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P9"
   TABLESPACE "TBS_ODS_LOG" ,
PARTITION "P10"
   TABLESPACE "TBS_ODS_LOG" )
  PARALLEL 4
说明:表user_list数据量比较大 500W , 表song_list 1000 ,user_list表为了分段进行处理才分了10个hash。

回复 只看该作者 道具 举报

11#
发表于 2013-11-28 16:18:22
数据构造方法:declare
  na integer;
  a1 integer :=1;
  a2 integer :=5000000;

begin
  for na in a1..a2
  loop
   insert into MUSICDW.user_list
   select 1 || random_num('nnnnnnnnnn')from dual;
  end loop;
  commit;
end;

回复 只看该作者 道具 举报

12#
发表于 2013-11-29 14:45:24
虽然目前找到了原因:因为随机函数random_num('nn')造成的。把该函数替换成系统自带函数dbms_random.value(10,99) --随机生成两位数。就OK。但是不知道为什么使用自己创建啊的函数SQL就不按照执行计划走并行?
random_num函数代码如下:
CREATE OR REPLACE FUNCTION RANDOM_NUM (IN_TEMPLATE IN VARCHAR2)  
RETURN VARCHAR2 IS  
LC$CRITERIA VARCHAR2(1);  
LC$PASSWORD VARCHAR2(500);  
LC$PATTERN VARCHAR2(500);  
LN$INDX NUMBER;  
BEGIN  
/*1-Character should be UPPERCASE     =====> Abbreviation [U]  
2- Character should be LOWERCASE      =====> Abbreviation [L]  
3- Character should be NUMBER         =====> Abbreviation [N]  
4- Character should be any character     =====> Abbreviation [A]  
5- Character should be NON-ALPHANUMERIC character =====> Abbreviation [S]*/  
   LC$CRITERIA := '';  
   LC$PASSWORD := '';  
   FOR I IN 1.. LENGTH(IN_TEMPLATE) LOOP  
     LC$CRITERIA := SUBSTR(IN_TEMPLATE,I,1);  
     IF UPPER(LC$CRITERIA ) = 'U' THEN   
       LC$PATTERN := q'[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';  
     ELSIF UPPER(LC$CRITERIA ) = 'L' THEN   
        LC$PATTERN := q'[abcdefghijklmnopqrstuvwxyz]';  
     ELSIF UPPER(LC$CRITERIA ) = 'N' THEN   
        LC$PATTERN := q'[0123456789]';  
     ELSIF UPPER(LC$CRITERIA ) = 'A' THEN   
        LC$PATTERN := q'[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]';  
     ELSIF UPPER(LC$CRITERIA ) = 'S' THEN   
        LC$PATTERN := q'[~!@#$%^&*()_+-}{|":;?.,<>[]/\]';  
     ELSE  
        LC$PATTERN := q'[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]';  
     END IF;  
     LN$INDX := TRUNC( LENGTH(LC$PATTERN) * DBMS_RANDOM.VALUE) + 1;  
     LC$PASSWORD := LC$PASSWORD || SUBSTR(LC$PATTERN,LN$INDX,1);  
   END LOOP;  
   RETURN LC$PASSWORD;  
END RANDOM_NUM;  

回复 只看该作者 道具 举报

13#
发表于 2013-11-29 14:48:22
对并行的原理不是很懂,希望高手能够指点迷津... 同样是随机函数为什么会造成不同的结果?

回复 只看该作者 道具 举报

14#
发表于 2013-11-29 14:52:16
1、是否FORCE PARALLEL DML也不行,action plan要优先回答
2、 如果用了自定义的函数 那么限制并行在我看来也很正常,并行本身不是那么随意 是需要协调控制的, 这也是为什么ORACLE的并行成本很高

回复 只看该作者 道具 举报

15#
发表于 2013-11-29 14:56:00
自定义函数加上参数 deterministic ,再试试

回复 只看该作者 道具 举报

16#
发表于 2013-11-29 15:17:29
Liu Maclean(刘相兵 发表于 2013-11-29 14:52
1、是否FORCE PARALLEL DML也不行,action plan要优先回答
2、 如果用了自定义的函数 那么限制并行在我看来 ...

刘大,你给出的方法全部测试过了。甚至给表加并行。SQL语句中加提示。ALTER SESSION FORCE PARALLEL DML PARALLEL 5;
ALTER SESSION FORCE PARALLEL QUERY PARALLEL 5; 还是不起作用,最后替换了随机函数,就走并行了。

回复 只看该作者 道具 举报

17#
发表于 2013-11-29 16:14:41
关于为什么查询用了并行 有这篇文档 Why Did My Query Go Parallel? (Doc ID 196938.1)

但很可惜到目前为止没有人 总结了 Why Diddn't My Query Go Parallel?

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-5-19 02:19 , Processed in 0.058787 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569