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

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

52

积分

0

好友

0

主题
1#
发表于 2012-6-16 03:09:46 | 查看: 7511| 回复: 3
最近在看11g新特性,碰到个问题请教大神,望赐教~

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL> show parameter cpu
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cpu_count                            integer     1
parallel_threads_per_cpu             integer     2
resource_manager_cpu_allocation      integer     1

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      AUTO
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     40
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     16
parallel_threads_per_cpu             integer     2
recovery_parallelism                 integer     0

SQL> conn sh/sh
Connected.

SQL> set autot traceonly exp
SQL> select sum(a.amount_sold) from sales a,sales b,sales c;
Execution Plan
----------------------------------------------------------
Plan hash value: 3928812053
---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name            | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                 |     1 |     5 |    22T  (1)|999:59:59 |       |       |
|   1 |  SORT AGGREGATE                   |                 |     1 |     5 |            |          |       |       |
|   2 |   MERGE JOIN CARTESIAN            |                 |   775P|  3445P|    22T  (1)|999:59:59 |       |       |
|   3 |    MERGE JOIN CARTESIAN           |                 |   844G|  3931G|    24M  (1)| 01:55:25 |       |       |
|   4 |     PARTITION RANGE ALL           |                 |   918K|  4486K|   530   (3)| 00:00:01 |     1 |    28 |
|   5 |      TABLE ACCESS FULL            | SALES           |   918K|  4486K|   530   (3)| 00:00:01 |     1 |    28 |
|   6 |     BUFFER SORT                   |                 |   918K|       |    24M  (1)| 01:55:25 |       |       |
|   7 |      PARTITION RANGE ALL          |                 |   918K|       |    27   (0)| 00:00:01 |     1 |    28 |
|   8 |       BITMAP CONVERSION TO ROWIDS |                 |   918K|       |    27   (0)| 00:00:01 |       |       |
|   9 |        BITMAP INDEX FAST FULL SCAN| SALES_PROMO_BIX |       |       |            |          |     1 |    28 |
|  10 |    BUFFER SORT                    |                 |   918K|       |    22T  (1)|999:59:59 |       |       |
|  11 |     PARTITION RANGE ALL           |                 |   918K|       |    27   (0)| 00:00:01 |     1 |    28 |
|  12 |      BITMAP CONVERSION TO ROWIDS  |                 |   918K|       |    27   (0)| 00:00:01 |       |       |
|  13 |       BITMAP INDEX FAST FULL SCAN | SALES_PROMO_BIX |       |       |            |          |     1 |    28 |
---------------------------------------------------------------------------------------------------------------------
Note
-----
   - automatic DOP: Computed Degree of Parallelism is 1

按照文档上来讲,对于这个查询肯定超过默认参数PARALLEL_DEGREE_POLICY设置的10s,应该会走并行的,此处为何还是提示为1.

SQL> select ename from emp;
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    14 |    98 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMP  |    14 |    98 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
   - dynamic sampling used for this statement (level=2)
   - automatic DOP: Computed Degree of Parallelism is 1 because of parallel threshold

低于10秒的查询,应该是会根据阀值执行串行计划。
2#
发表于 2012-6-16 12:10:47
ODM TEST:
  1. SQL> show parameter parallel

  2. NAME                                 TYPE        VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. fast_start_parallel_rollback         string      LOW
  5. parallel_adaptive_multi_user         boolean     TRUE
  6. parallel_automatic_tuning            boolean     FALSE
  7. parallel_degree_limit                string      CPU
  8. parallel_degree_policy               string      MANUAL
  9. parallel_execution_message_size      integer     16384
  10. parallel_force_local                 boolean     FALSE
  11. parallel_instance_group              string
  12. parallel_io_cap_enabled              boolean     FALSE
  13. parallel_max_servers                 integer     80
  14. parallel_min_percent                 integer     0

  15. NAME                                 TYPE        VALUE
  16. ------------------------------------ ----------- ------------------------------
  17. parallel_min_servers                 integer     0
  18. parallel_min_time_threshold          string      AUTO
  19. parallel_server                      boolean     FALSE
  20. parallel_server_instances            integer     1
  21. parallel_servers_target              integer     32
  22. parallel_threads_per_cpu             integer     2
  23. recovery_parallelism                 integer     0
  24. SQL>
  25. SQL> alter system set parallel_degree_policy=AUTO;

  26. System altered.

  27. SQL>

  28. SQL>
  29. SQL>
  30. SQL>
  31. SQL> alter system set parallel_min_time_threshold=10;

  32. System altered.



  33. SQL> conn sh/sh
  34. Connected.
  35. SQL> set autot traceonly exp
  36. SQL>  select sum(a.amount_sold) from sales a,sales b,sales c;

  37. Execution Plan
  38. ----------------------------------------------------------
  39. Plan hash value: 3928812053

  40. ---------------------------------------------------------------------------------------------------------------------
  41. | Id  | Operation                         | Name            | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
  42. ---------------------------------------------------------------------------------------------------------------------
  43. |   0 | SELECT STATEMENT                  |                 |     1 |     5 |    22T  (1)|999:59:59 |       |       |
  44. |   1 |  SORT AGGREGATE                   |                 |     1 |     5 |            |          |       |       |
  45. |   2 |   MERGE JOIN CARTESIAN            |                 |   775P|  3445P|    22T  (1)|999:59:59 |       |       |
  46. |   3 |    MERGE JOIN CARTESIAN           |                 |   844G|  3931G|    24M  (1)| 82:43:36 |       |       |
  47. |   4 |     PARTITION RANGE ALL           |                 |   918K|  4486K|   530   (3)| 00:00:07 |     1 |    28 |
  48. |   5 |      TABLE ACCESS FULL            | SALES           |   918K|  4486K|   530   (3)| 00:00:07 |     1 |    28 |
  49. |   6 |     BUFFER SORT                   |                 |   918K|       |    24M  (1)| 82:43:30 |       |       |
  50. |   7 |      PARTITION RANGE ALL          |                 |   918K|       |    27   (0)| 00:00:01 |     1 |    28 |
  51. |   8 |       BITMAP CONVERSION TO ROWIDS |                 |   918K|       |    27   (0)| 00:00:01 |       |       |
  52. |   9 |        BITMAP INDEX FAST FULL SCAN| SALES_PROMO_BIX |       |       |            |          |     1 |    28 |
  53. |  10 |    BUFFER SORT                    |                 |   918K|       |    22T  (1)|999:59:59 |       |       |
  54. |  11 |     PARTITION RANGE ALL           |                 |   918K|       |    27   (0)| 00:00:01 |     1 |    28 |
  55. |  12 |      BITMAP CONVERSION TO ROWIDS  |                 |   918K|       |    27   (0)| 00:00:01 |       |       |
  56. |  13 |       BITMAP INDEX FAST FULL SCAN | SALES_PROMO_BIX |       |       |            |          |     1 |    28 |
  57. ---------------------------------------------------------------------------------------------------------------------

  58. Note
  59. -----
  60.    - automatic DOP: skipped because of IO calibrate statistics are missing
  61.    
  62.    
  63.    
  64.    GATHER IO calibrate STATISTICS
  65.    
  66.    
  67.    
  68.     set serveroutput on;
  69.    DECLARE
  70.       lat  INTEGER;
  71.       iops INTEGER;
  72.       mbps INTEGER;
  73.     BEGIN
  74.     -- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (disk_count,max_latency , iops, mbps, lat);
  75.        DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 15, iops, mbps, lat);
  76.   
  77.       DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
  78.      DBMS_OUTPUT.PUT_LINE ('latency  = ' || lat);
  79.      dbms_output.put_line('max_mbps = ' || mbps);
  80.    end;
  81.    /
  82.    
  83. max_iops = 78
  84. latency  = 12
  85. max_mbps = 49
  86.    
  87.    
  88. SQL>  select sum(a.amount_sold) from sales a,sales b,sales c;

  89. Execution Plan
  90. ----------------------------------------------------------
  91. Plan hash value: 3928812053

  92. ---------------------------------------------------------------------------------------------------------------------
  93. | Id  | Operation                         | Name            | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
  94. ---------------------------------------------------------------------------------------------------------------------
  95. |   0 | SELECT STATEMENT                  |                 |     1 |     5 |    22T  (1)|999:59:59 |       |       |
  96. |   1 |  SORT AGGREGATE                   |                 |     1 |     5 |            |          |       |       |
  97. |   2 |   MERGE JOIN CARTESIAN            |                 |   775P|  3445P|    22T  (1)|999:59:59 |       |       |
  98. |   3 |    MERGE JOIN CARTESIAN           |                 |   844G|  3931G|    24M  (1)| 00:48:58 |       |       |
  99. |   4 |     PARTITION RANGE ALL           |                 |   918K|  4486K|   530   (3)| 00:00:01 |     1 |    28 |
  100. |   5 |      TABLE ACCESS FULL            | SALES           |   918K|  4486K|   530   (3)| 00:00:01 |     1 |    28 |
  101. |   6 |     BUFFER SORT                   |                 |   918K|       |    24M  (1)| 00:48:58 |       |       |
  102. |   7 |      PARTITION RANGE ALL          |                 |   918K|       |    27   (0)| 00:00:01 |     1 |    28 |
  103. |   8 |       BITMAP CONVERSION TO ROWIDS |                 |   918K|       |    27   (0)| 00:00:01 |       |       |
  104. |   9 |        BITMAP INDEX FAST FULL SCAN| SALES_PROMO_BIX |       |       |            |          |     1 |    28 |
  105. |  10 |    BUFFER SORT                    |                 |   918K|       |    22T  (1)|999:59:59 |       |       |
  106. |  11 |     PARTITION RANGE ALL           |                 |   918K|       |    27   (0)| 00:00:01 |     1 |    28 |
  107. |  12 |      BITMAP CONVERSION TO ROWIDS  |                 |   918K|       |    27   (0)| 00:00:01 |       |       |
  108. |  13 |       BITMAP INDEX FAST FULL SCAN | SALES_PROMO_BIX |       |       |            |          |     1 |    28 |
  109. ---------------------------------------------------------------------------------------------------------------------

  110. Note
  111. -----
  112.    - automatic DOP: Computed Degree of Parallelism is 1
  113.   
  114.    
  115.    SQL> alter session set events '10053 trace name context forever,level 1';

  116. Session altered.

  117. SQL> explain plan for select sum(a.amount_sold) from sales a,sales b,sales c;

  118. Explained.


  119. 10053  解释了 为什么 DOP 选择


  120. kkeCostToTime: using io calibrate stats
  121. maxmbps=49(MB/s) maxpmbps=66(MB/s)
  122. block_size=8192 mb_io_count=4 mb_io_size=30247 (bytes)
  123. tot_io_size=0(MB) time=0(ms)

  124. AUTO DOP PLANS EVALUATION
  125. ***************************************
  126. Compilation completed with Dop: 1.
  127.   Cost_io:  0.00  Cost_cpu: 380000.00
  128.   Card:     1.00  Bytes:    305.00
  129.   Cost:     0.02  Est_time:  0ms
  130. kkopqSetDopReason: Reason why we chose this DOP is: no expensive parallel operation.
  131. No parallel scan operations
  132. kkopqCombineDop: Dop:1 Hint:no
  133. Query: compute:yes forced:no  computedDop:2 forceDop:0
  134. kkopqSetDopReason: Reason why we chose this DOP is: parallel threshold.
  135. Serial phase is inexpensive (0), stick to it.
  136. Costing completed. DOP chosen: 1.
  137. AutoDop: kkopqSetMaxDopInCursorEnv:In the Cursor Session Env, max DOP is set to 43



  138.     Reason why we chose this DOP is: no expensive parallel operation.
  139.     Reason why we chose this DOP is: parallel threshold.
复制代码
CBO 认为 DOP =1 才是合理的  Serial phase is inexpensive (0), stick to it.   Costing completed. DOP chosen: 1.

回复 只看该作者 道具 举报

3#
发表于 2012-6-16 15:15:23
MORE EXAMPLE :


SQL> SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL>
SQL> set autotrace trace exp;
SQL> set linesize 140 pagesize 1400
SQL>  select count(*)  from large_mac;

Execution Plan
----------------------------------------------------------
Plan hash value: 1764901164

---------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name      | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |           |     1 | 27784   (1)| 00:00:04 |        |      |            |
|   1 |  SORT AGGREGATE        |           |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR       |           |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM) | :TQ10000  |     1 |            |          |  Q1,00 | P->S | QC (RAND)  |
|   4 |     SORT AGGREGATE     |           |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR |           |    19M| 27784   (1)| 00:00:04 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS FULL| LARGE_MAC |    19M| 27784   (1)| 00:00:04 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------

Note
-----
   - automatic DOP: Computed Degree of Parallelism is 3
   
   
  SQL> alter session set events '10053 trace name context forever,level 1';

Session altered.

SQL> explain plan for select count(*)  from large_mac;

Explained.

SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/s01/orabase/diag/rdbms/g11r23/G11R23/trace/G11R23_ora_28215.trc



AUTO DOP PLANS EVALUATION
***************************************
Compilation completed with Dop: 1.
  Cost_io:  74878.00  Cost_cpu: 4870769552.48
  Card:     1.00  Bytes:    0.00
  Cost:     75109.71  Est_time:  32828ms
kkopqCombineDop: Dop:3 Hint:no
Query: compute:yes forced:no  computedDop:3 forceDop:0
Serial plan is expensive enough to be a candidate for parallelism (75110)
Signal reparse with DOP 3.
*****************************
Number of Compilations tried: 1
*****************************



parse 后发现Serial Plan中的 IO COST很高, 考虑使用并行 DOP=3




ODM KNOWLEDGE:

When automatic degree of parallelism (Auto DOP) is on the Oracle Optimizer will
Automatically decide the DOP for a statement based on the resource requirements
of the statement. Any statement that can be parallelized is a candidate for AUTO DOP.
You can see the DOP that the optimizer came up with in the notes section of the
explain plan (see below)
There are two init.ora parameters that control auto DOP
PARALLEL_DEGREE_POLICY and PARALLEL_MIN_TIME_THRESHOLD.
PARALLEL_DEGREE_POLICY controls whether or not auto DOP will be used.
By default Auto DOP is switch off for backward compatibility (MANUAL). To
Enable Auto DOP for everything set the parameter to AUTO. It is recommended
that DW users choose the LIMITED setting. It will apply auto DOP only for statements
where at least one table is decorated with PARALLEL clause.
AUTO_DEGREE_POLICY:
o        MANUAL - reverts to Oracle Database 10g behavior (Default).
o        LIMITED - auto DOP applied only to stmts that contain tables or indexes decorated explicitly with the parallel clause with or without explicit DOP
o        AUTO  - automatic PQ for all statements.  

PARALLEL_MIN_TIME_THREADHOLD: the execution time, as estimated by the optimizer,
above which a statement is considered for automatic PQ and automatic derivation of DOP.
By default this is set to AUTO which means 30sec.

When a SQL statement is executed it will be hard parsed and a serial plan will be developed
The expected elapse time of that plan will be examined. If the expected Elapse time is
Less than PARALLEL_MIN_TIME_THRESHOLD  then the query will execute serially.

If the expected Elapse time is greater than PARALLEL_MIN_TIME_THRESHOLD  then the plan
Will be re-evaluated to run in parallel and the optimizer will determine the ideal DOP. The
Optimizer automatically determines the DOP based on the resource required for all scan operations
(full table scan, index fast full scan and so on)

However, the optimizer will cap the actual DOP for a statement with the default DOP
(paralllel_threads_per_cpu X CPU_COUNT X INSTANCE_COUNT), to ensure parallel
Processes do not flood the system.


Controlling Auto DOP
Controlled by two init.ora parameters:
PARALLEL_DEGREE_POLICY
Controls whether or not auto DOP will be used
Default is MANUAL which means no Auto DOP
Set to AUTO to enable auto DOP
PARALLEL_MIN_TIME_THRESHOLD
Controls which statements are candidate for parallelism
Default is 30 seconds



How Auto DOP Works

Statement with an elapse time estimate of less than PARALLEL_MIN_TIME_THRESHOLD will run serial
Statement above threshold are candidate for parallelism
Maximum DOP controlled by PARALLEL_DEGREE_LIMIT
Default value is
PARALLEL_THREADS_PER_CPU X CPU_COUNT
Actual DOP = MIN(PARALLEL_DEGREE_LIMIT, ideal DOP)

回复 只看该作者 道具 举报

4#
发表于 2012-6-16 21:01:26
色勒斯清,Many thx!

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-11-15 21:02 , Processed in 0.055690 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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