Oracle 12c 新SQL提示(hint)



Oracle 12c中引入了许多新特性,其中部分是和SQL相关的特性.而一些新的SQL提示也随着这些新特性被引入.

enable_parallel_dml
Syntax: enable_parallel_dml
Description: Enable parallel dml. Same effect as "alter session enable parallel dml"

SQL??
  1. HelloDBA.com> create table t_obj as select * from dba_objects;
  2. HelloDBA.com> create table t_tab as select * from dba_tables;
  3. HelloDBA.com> exec sql_explain('delete /*+enable_parallel_dml parallel(o)*/from t_obj o where exists (select 1 from t_tab t where t.owner=o.owner and t.table_name = o.object_name)','TYPICAL');
  4. Plan hash value: 409221376
  5. ----------------------------------------------------------------------------------------------------------------------------
  6. | Id  | Operation                          | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  7. ----------------------------------------------------------------------------------------------------------------------------
  8. |   0 | DELETE STATEMENT                   |          |  3160 |   175K|    44   (0)| 00:00:01 |        |      |            |
  9. |   1 |  PX COORDINATOR                    |          |       |       |            |          |        |      |            |
  10. |   2 |   PX SEND QC (RANDOM)              | :TQ10003 |  3160 |   175K|    44   (0)| 00:00:01 |  Q1,03 | P->S | QC (RAND)  |
  11. |   3 |    DELETE                          | T_OBJ    |       |       |            |          |  Q1,03 | PCWP |            |
  12. |   4 |     PX RECEIVE                     |          |  3160 |   175K|    44   (0)| 00:00:01 |  Q1,03 | PCWP |            |
  13. |   5 |      PX SEND HASH (BLOCK ADDRESS)  | :TQ10002 |  3160 |   175K|    44   (0)| 00:00:01 |  Q1,02 | P->P | HASH (BLOCK|
  14. |*  6 |       HASH JOIN RIGHT SEMI BUFFERED|          |  3160 |   175K|    44   (0)| 00:00:01 |  Q1,02 | PCWP |            |
  15. |   7 |        PX RECEIVE                  |          |  2426 | 63076 |    29   (0)| 00:00:01 |  Q1,02 | PCWP |            |
  16. |   8 |         PX SEND HASH               | :TQ10000 |  2426 | 63076 |    29   (0)| 00:00:01 |  Q1,00 | S->P | HASH       |
  17. |   9 |          PX SELECTOR               |          |       |       |            |          |  Q1,00 | SCWC |            |
  18. |  10 |           TABLE ACCESS FULL        | T_TAB    |  2426 | 63076 |    29   (0)| 00:00:01 |  Q1,00 | SCWP |            |
  19. |  11 |        PX RECEIVE                  |          | 92299 |  2794K|    15   (0)| 00:00:01 |  Q1,02 | PCWP |            |
  20. |  12 |         PX SEND HASH               | :TQ10001 | 92299 |  2794K|    15   (0)| 00:00:01 |  Q1,01 | P->P | HASH       |
  21. |  13 |          PX BLOCK ITERATOR         |          | 92299 |  2794K|    15   (0)| 00:00:01 |  Q1,01 | PCWC |            |
  22. |  14 |           TABLE ACCESS FULL        | T_OBJ    | 92299 |  2794K|    15   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  23. ----------------------------------------------------------------------------------------------------------------------------

disable_parallel_dml
Syntax: disable_parallel_dml
Description: Disable parallel dml. Same effect as "alter session disable parallel dml"

SQL??
  1. HelloDBA.com> alter session enable parallel dml;
  2. HelloDBA.com> exec sql_explain('delete /*+disable_parallel_dml parallel(o)*/from t_obj o where exists (select 1 from t_tab t where t.owner=o.owner and t.table_name = o.object_name)','TYPICAL');
  3. Plan hash value: 1357806520
  4. ------------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation                | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. ------------------------------------------------------------------------------------------------------------------
  7. |   0 | DELETE STATEMENT         |          |  3160 |   175K|   460   (1)| 00:00:01 |        |      |            |
  8. |   1 |  DELETE                  | T_OBJ    |       |       |            |          |        |      |            |
  9. |   2 |   PX COORDINATOR         |          |       |       |            |          |        |      |            |
  10. |   3 |    PX SEND QC (RANDOM)   | :TQ10001 |  3160 |   175K|   460   (1)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
  11. |*  4 |     HASH JOIN RIGHT SEMI |          |  3160 |   175K|   460   (1)| 00:00:01 |  Q1,01 | PCWP |            |
  12. |   5 |      PX RECEIVE          |          |  2426 | 63076 |    29   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  13. |   6 |       PX SEND BROADCAST  | :TQ10000 |  2426 | 63076 |    29   (0)| 00:00:01 |  Q1,00 | S->P | BROADCAST  |
  14. |   7 |        PX SELECTOR       |          |       |       |            |          |  Q1,00 | SCWC |            |
  15. |   8 |         TABLE ACCESS FULL| T_TAB    |  2426 | 63076 |    29   (0)| 00:00:01 |  Q1,00 | SCWP |            |
  16. |   9 |      PX BLOCK ITERATOR   |          | 92299 |  2794K|   430   (0)| 00:00:01 |  Q1,01 | PCWC |            |
  17. |  10 |       TABLE ACCESS FULL  | T_OBJ    | 92299 |  2794K|   430   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  18. ------------------------------------------------------------------------------------------------------------------

USE_CUBE
Sytntax: USE_CUBE ( [ @ queryblock ] tablespec [ tablespec ]... )
Description:When the right-hand side of the join is a cube, the USE_CUBE hint instructs the optimizer to join each specified table with another row source using a cube join. If the optimizer decides not to use the cube join based on statistical analysis, then you can use USE_CUBE to override that decision.
Note: Sample schema comes from oracle 11.2 BI sample codes.

SQL??
  1. HelloDBA.com> create view cube_view as select * from table(cube_table('GLOBAL.UNITS_CUBE'));
  2. HelloDBA.com> create view time_dim_view as select * from global.time_dim;
  3. HelloDBA.com> create view channel_dim_view as select * from global.channel_dim;
  4. HelloDBA.com> create view customer_dim_view as select * from global.customer_dim;
  5. HelloDBA.com> create view product_dim_view as select * from global.product_dim;
  6. HelloDBA.com> alter session set "_optimizer_cube_join_enabled"=false;
  7. HelloDBA.com> exec sql_explain('select /*+use_cube(t cn cm cb)*/* from cube_view cb, time_dim_view t, channel_dim_view cn, customer_dim_view cm where cb.time=t.month_id and cb.channel=cn.channel_id and cb.customer=cm.account_id','typical');
  8. Plan hash value: 1674841133
  9. ------------------------------------------------------------------------------------------
  10. | Id  | Operation                 | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
  11. ------------------------------------------------------------------------------------------
  12. |   0 | SELECT STATEMENT          |              |   316K|   401M|    19  (48)| 00:00:01 |
  13. |*  1 |  HASH JOIN                |              |   316K|   401M|    19  (48)| 00:00:01 |
  14. |   2 |   TABLE ACCESS FULL       | TIME_DIM     |   120 | 28680 |     3   (0)| 00:00:01 |
  15. |*  3 |   CUBE JOIN               |              |   585K|   609M|    14  (50)| 00:00:01 |
  16. |   4 |    MERGE JOIN CARTESIAN   |              |   183 | 71919 |     6   (0)| 00:00:01 |
  17. |   5 |     TABLE ACCESS FULL     | CHANNEL_DIM  |     3 |   237 |     2   (0)| 00:00:01 |
  18. |   6 |     BUFFER SORT           |              |    61 | 19154 |     4   (0)| 00:00:01 |
  19. |   7 |      TABLE ACCESS FULL    | CUSTOMER_DIM |    61 | 19154 |     1   (0)| 00:00:01 |
  20. |   8 |    CUBE SCAN PARTIAL OUTER| UNITS_CUBE   |  1342K|   896M|     5  (80)| 00:00:01 |
  21. ------------------------------------------------------------------------------------------

NO_USE_CUBE
Syntax:NO_USE_CUBE ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The NO_USE_CUBE hint instructs the optimizer to exclude cube joins when joining each specified table to another row source using the specified table as the inner table.
Note: Sample schema comes from oracle 11.2 BI sample codes.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_cube_join_enabled"=true;
  2. HelloDBA.com> exec sql_explain('select /*+no_use_cube(cb)*/* from cube_view cb, time_dim_view t, channel_dim_view cn, customer_dim_view cm where cb.time=t.month_id and cb.channel=cn.channel_id and cb.customer=cm.account_id','typical');
  3. Plan hash value: 2364382396
  4. ------------------------------------------------------------------------------------------
  5. | Id  | Operation                 | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT          |              |   316K|   401M|    21  (48)| 00:00:01 |
  8. |*  1 |  HASH JOIN                |              |   316K|   401M|    21  (48)| 00:00:01 |
  9. |   2 |   TABLE ACCESS FULL       | TIME_DIM     |   120 | 28680 |     3   (0)| 00:00:01 |
  10. |*  3 |   HASH JOIN               |              |   585K|   609M|    16  (50)| 00:00:01 |
  11. |   4 |    MERGE JOIN CARTESIAN   |              |   183 | 71919 |     6   (0)| 00:00:01 |
  12. |   5 |     TABLE ACCESS FULL     | CHANNEL_DIM  |     3 |   237 |     2   (0)| 00:00:01 |
  13. |   6 |     BUFFER SORT           |              |    61 | 19154 |     4   (0)| 00:00:01 |
  14. |   7 |      TABLE ACCESS FULL    | CUSTOMER_DIM |    61 | 19154 |     1   (0)| 00:00:01 |
  15. |   8 |    CUBE SCAN PARTIAL OUTER| UNITS_CUBE   |  1342K|   896M|     7  (72)| 00:00:01 |
  16. ------------------------------------------------------------------------------------------

CUBE_AJ
Syntax:CUBE_AJ ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The CUBE_AJ hint instructs the optimizer to clude cube anti joins when joining each specified table to another row source.
Note: Sample schema comes from oracle 11.2 BI sample codes.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_cube_join_enabled"=false;
  2. HelloDBA.com> exec sql_explain('select * from product_dim_view pd where not exists (select /*+cube_aj*/1 from cube_view cb where cb.product=pd.item_id)','typical');
  3. Plan hash value: 2520340146
  4. ----------------------------------------------------------------------------------------
  5. | Id  | Operation                | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ----------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT         |             |    36 |  8208 |    11  (64)| 00:00:01 |
  8. |*  1 |  CUBE JOIN ANTI          |             |    36 |  8208 |    11  (64)| 00:00:01 |
  9. |   2 |   TABLE ACCESS FULL      | PRODUCT_DIM |    36 |  7488 |     2   (0)| 00:00:01 |
  10. |   3 |   CUBE SCAN PARTIAL OUTER| UNITS_CUBE  |  1342K|    25M|     5  (60)| 00:00:01 |
  11. ----------------------------------------------------------------------------------------

CUBE_SJ
Syntax:CUBE_SJ ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The CUBE_SJ hint instructs the optimizer to clude cube semi joins when joining each specified table to another row source.
Note: Sample schema comes from oracle 11.2 BI sample codes.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_cube_join_enabled"=false;
  2. HelloDBA.com> exec sql_explain('select * from product_dim_view pd where exists (select /*+cube_sj*/1 from cube_view cb where cb.product=pd.item_id)','typical');
  3. Plan hash value: 2914263671
  4. ----------------------------------------------------------------------------------------
  5. | Id  | Operation                | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ----------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT         |             |    36 |  8604 |    13  (62)| 00:00:01 |
  8. |*  1 |  HASH JOIN SEMI          |             |    36 |  8604 |    13  (62)| 00:00:01 |
  9. |   2 |   TABLE ACCESS FULL      | PRODUCT_DIM |    36 |  7884 |     3   (0)| 00:00:01 |
  10. |   3 |   CUBE SCAN PARTIAL OUTER| UNITS_CUBE  |  1342K|    25M|     7  (72)| 00:00:01 |
  11. ----------------------------------------------------------------------------------------

AUTO_REOPTIMIZE
Syntax:AUTO_REOPTIMIZE
Description:The AUTO_REOPTIMIZE hint instructs the optimizer to automatically change a plan on subsequent executions of a SQL statement. 
Note: The "automatic reoptimization" is the ability of the optimizer to automatically change a plan on subsequent executions of a SQL statement. Automatic reoptimization can fix any suboptimal plan chosen due to incorrect optimizer estimates, from a suboptimal distribution method to an incorrect choice of degree of parallelism.

SQL??
  1. HelloDBA.com> create table t_user as select * from dba_users;
  2. HelloDBA.com> create table t_ind as select * from dba_indexes;
  3. HelloDBA.com> create index t_tab_idx1 on t_tab(owner, table_name);
  4. HelloDBA.com> create table t_obj1 as select * from t_obj;
  5. HelloDBA.com> create index t_obj1_idx1 on t_obj1(owner);
  6. HelloDBA.com> create index t_obj1_idx2 on t_obj1(owner, object_name);
  7. HelloDBA.com> exec dbms_stats.set_table_stats(user,'T_OBJ1', numrows=>1);
  8. HelloDBA.com> alter session set "_optimizer_use_feedback"=false;
  9. HelloDBA.com> alter system flush shared_pool;
  10. -- First running
  11. HelloDBA.com> exec sql_explain('select /*+AUTO_REOPTIMIZE*/* from t_tab t, t_obj1 o where o.owner=t.owner and o.object_name=t.table_name and exists (select 1 from t_ind i, t_user u where o.owner=i.owner and o.object_name = i.index_name and o.owner=u.username and u.default_tablespace=''SYSAUX'')''typical'false);
  12. SQL_ID  5a4p65yb97cs6, child number 0
  13. -------------------------------------
  14. select /*+AUTO_REOPTIMIZE*/* from t_tab t, t_obj1 o where
  15. o.owner=t.owner and o.object_name=t.table_name and exists (select 1
  16. from t_ind i, t_user u where o.owner=i.owner and o.object_name =
  17. i.index_name and o.owner=u.username and u.default_tablespace='SYSAUX')
  18. Plan hash value: 2082622820
  19. --------------------------------------------------------------------------------------------
  20. | Id  | Operation                     | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
  21. --------------------------------------------------------------------------------------------
  22. |   0 | SELECT STATEMENT              |            |       |       |   484 (100)|          |
  23. |*  1 |  FILTER                       |            |       |       |            |          |
  24. |   2 |   NESTED LOOPS                |            |     1 |   374 |   432   (0)| 00:00:01 |
  25. |   3 |    NESTED LOOPS               |            |     1 |   374 |   432   (0)| 00:00:01 |
  26. |   4 |     TABLE ACCESS FULL         | T_OBJ1     |     1 |   115 |   430   (0)| 00:00:01 |
  27. |*  5 |     INDEX RANGE SCAN          | T_TAB_IDX1 |     1 |       |     1   (0)| 00:00:01 |
  28. |   6 |    TABLE ACCESS BY INDEX ROWID| T_TAB      |     1 |   259 |     2   (0)| 00:00:01 |
  29. |   7 |   MERGE JOIN CARTESIAN        |            |     1 |    47 |    52   (0)| 00:00:01 |
  30. |*  8 |    TABLE ACCESS FULL          | T_IND      |     1 |    30 |    49   (0)| 00:00:01 |
  31. |   9 |    BUFFER SORT                |            |     1 |    17 |     3   (0)| 00:00:01 |
  32. |* 10 |     TABLE ACCESS FULL         | T_USER     |     1 |    17 |     3   (0)| 00:00:01 |
  33. --------------------------------------------------------------------------------------------
  34. Note
  35. -----
  36. - this is an adaptive plan
  37. -- Second running
  38. HelloDBA.com> exec sql_explain('select /*+AUTO_REOPTIMIZE*/* from t_tab t, t_obj1 o where o.owner=t.owner and o.object_name=t.table_name and exists (select 1 from t_ind i, t_user u where o.owner=i.owner and o.object_name = i.index_name and o.owner=u.username and u.default_tablespace=''SYSAUX'')''typical'false);
  39. SQL_ID  5a4p65yb97cs6, child number 1
  40. -------------------------------------
  41. select /*+AUTO_REOPTIMIZE*/* from t_tab t, t_obj1 o where
  42. o.owner=t.owner and o.object_name=t.table_name and exists (select 1
  43. from t_ind i, t_user u where o.owner=i.owner and o.object_name =
  44. i.index_name and o.owner=u.username and u.default_tablespace='SYSAUX')
  45. Plan hash value: 1348485435
  46. --------------------------------------------------------------------------------------
  47. | Id  | Operation                | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
  48. --------------------------------------------------------------------------------------
  49. |   0 | SELECT STATEMENT         |           |       |       |   514 (100)|          |
  50. |   1 |  VIEW                    | VM_NWVW_2 |   300 |   362K|   514   (1)| 00:00:01 |
  51. |   2 |   HASH UNIQUE            |           |   300 |   123K|   514   (1)| 00:00:01 |
  52. |*  3 |    HASH JOIN             |           |   300 |   123K|   513   (1)| 00:00:01 |
  53. |*  4 |     HASH JOIN RIGHT SEMI |           |   300 | 48600 |   483   (1)| 00:00:01 |
  54. |*  5 |      TABLE ACCESS FULL   | T_USER    |    10 |   170 |     3   (0)| 00:00:01 |
  55. |*  6 |      HASH JOIN RIGHT SEMI|           |   308 | 44660 |   480   (1)| 00:00:01 |
  56. |   7 |       TABLE ACCESS FULL  | T_IND     |  4713 |   138K|    49   (0)| 00:00:01 |
  57. |   8 |       TABLE ACCESS FULL  | T_OBJ1    | 92299 |    10M|   431   (1)| 00:00:01 |
  58. |   9 |     TABLE ACCESS FULL    | T_TAB     |  2426 |   613K|    29   (0)| 00:00:01 |
  59. --------------------------------------------------------------------------------------
  60. Predicate Information (identified by operation id):
  61. ---------------------------------------------------
  62. 3 - access("O"."OWNER"="T"."OWNER" AND "O"."OBJECT_NAME"="T"."TABLE_NAME")
  63. 4 - access("O"."OWNER"="U"."USERNAME")
  64. 5 - filter("U"."DEFAULT_TABLESPACE"='SYSAUX')
  65. 6 - access("O"."OWNER"="I"."OWNER" AND "O"."OBJECT_NAME"="I"."INDEX_NAME")
  66. Note
  67. -----
  68. statistics feedback used for this statement

NO_AUTO_REOPTIMIZE
Syntax:AUTO_REOPTIMIZE
Description:The AUTO_REOPTIMIZE hint instructs the optimizer not to automatically change a plan on subsequent executions of a SQL statement.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_use_feedback"=true;
  2. HelloDBA.com> alter system flush shared_pool;
  3. HelloDBA.com> exec sql_explain('select /*+NO_AUTO_REOPTIMIZE*/* from t_tab t, t_obj1 o where o.owner=t.owner and o.object_name=t.table_name and exists (select 1 from t_ind i, t_user u where o.owner=i.owner and o.object_name = i.index_name and o.owner=u.username and u.default_tablespace=''SYSAUX'')''typical'false);
  4. SQL_ID  0g6swgrm8tt0s, child number 0
  5. -------------------------------------
  6. select /*+NO_AUTO_REOPTIMIZE*/* from t_tab t, t_obj1 o where
  7. o.owner=t.owner and o.object_name=t.table_name and exists (select 1
  8. from t_ind i, t_user u where o.owner=i.owner and o.object_name =
  9. i.index_name and o.owner=u.username and u.default_tablespace='SYSAUX')
  10. Plan hash value: 2082622820
  11. --------------------------------------------------------------------------------------------
  12. | Id  | Operation                     | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
  13. --------------------------------------------------------------------------------------------
  14. |   0 | SELECT STATEMENT              |            |       |       |   484 (100)|          |
  15. |*  1 |  FILTER                       |            |       |       |            |          |
  16. |   2 |   NESTED LOOPS                |            |     1 |   374 |   432   (0)| 00:00:01 |
  17. |   3 |    NESTED LOOPS               |            |     1 |   374 |   432   (0)| 00:00:01 |
  18. |   4 |     TABLE ACCESS FULL         | T_OBJ1     |     1 |   115 |   430   (0)| 00:00:01 |
  19. |*  5 |     INDEX RANGE SCAN          | T_TAB_IDX1 |     1 |       |     1   (0)| 00:00:01 |
  20. |   6 |    TABLE ACCESS BY INDEX ROWID| T_TAB      |     1 |   259 |     2   (0)| 00:00:01 |
  21. |   7 |   MERGE JOIN CARTESIAN        |            |     1 |    47 |    52   (0)| 00:00:01 |
  22. |*  8 |    TABLE ACCESS FULL          | T_IND      |     1 |    30 |    49   (0)| 00:00:01 |
  23. |   9 |    BUFFER SORT                |            |     1 |    17 |     3   (0)| 00:00:01 |
  24. |* 10 |     TABLE ACCESS FULL         | T_USER     |     1 |    17 |     3   (0)| 00:00:01 |
  25. --------------------------------------------------------------------------------------------
  26. Predicate Information (identified by operation id):
  27. ---------------------------------------------------
  28. 1 - filter( IS NOT NULL)
  29. 5 - access("O"."OWNER"="T"."OWNER" AND "O"."OBJECT_NAME"="T"."TABLE_NAME")
  30. 8 - filter(("I"."INDEX_NAME"=:B1 AND "I"."OWNER"=:B2))
  31. 10 - filter(("U"."USERNAME"=:B1 AND "U"."DEFAULT_TABLESPACE"='SYSAUX'))
  32. Note
  33. -----
  34. - this is an adaptive plan
  35. HelloDBA.com> exec sql_explain('select /*+NO_AUTO_REOPTIMIZE*/* from t_tab t, t_obj1 o where o.owner=t.owner and o.object_name=t.table_name and exists (select 1 from t_ind i, t_user u where o.owner=i.owner and o.object_name = i.index_name and o.owner=u.username and u.default_tablespace=''SYSAUX'')''typical'false);
  36. SQL_ID  0g6swgrm8tt0s, child number 0
  37. -------------------------------------
  38. select /*+NO_AUTO_REOPTIMIZE*/* from t_tab t, t_obj1 o where
  39. o.owner=t.owner and o.object_name=t.table_name and exists (select 1
  40. from t_ind i, t_user u where o.owner=i.owner and o.object_name =
  41. i.index_name and o.owner=u.username and u.default_tablespace='SYSAUX')
  42. Plan hash value: 2082622820
  43. --------------------------------------------------------------------------------------------
  44. | Id  | Operation                     | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
  45. --------------------------------------------------------------------------------------------
  46. |   0 | SELECT STATEMENT              |            |       |       |   484 (100)|          |
  47. |*  1 |  FILTER                       |            |       |       |            |          |
  48. |   2 |   NESTED LOOPS                |            |     1 |   374 |   432   (0)| 00:00:01 |
  49. |   3 |    NESTED LOOPS               |            |     1 |   374 |   432   (0)| 00:00:01 |
  50. |   4 |     TABLE ACCESS FULL         | T_OBJ1     |     1 |   115 |   430   (0)| 00:00:01 |
  51. |*  5 |     INDEX RANGE SCAN          | T_TAB_IDX1 |     1 |       |     1   (0)| 00:00:01 |
  52. |   6 |    TABLE ACCESS BY INDEX ROWID| T_TAB      |     1 |   259 |     2   (0)| 00:00:01 |
  53. |   7 |   MERGE JOIN CARTESIAN        |            |     1 |    47 |    52   (0)| 00:00:01 |
  54. |*  8 |    TABLE ACCESS FULL          | T_IND      |     1 |    30 |    49   (0)| 00:00:01 |
  55. |   9 |    BUFFER SORT                |            |     1 |    17 |     3   (0)| 00:00:01 |
  56. |* 10 |     TABLE ACCESS FULL         | T_USER     |     1 |    17 |     3   (0)| 00:00:01 |
  57. --------------------------------------------------------------------------------------------
  58. Predicate Information (identified by operation id):
  59. ---------------------------------------------------
  60. 1 - filter( IS NOT NULL)
  61. 5 - access("O"."OWNER"="T"."OWNER" AND "O"."OBJECT_NAME"="T"."TABLE_NAME")
  62. 8 - filter(("I"."INDEX_NAME"=:B1 AND "I"."OWNER"=:B2))
  63. 10 - filter(("U"."USERNAME"=:B1 AND "U"."DEFAULT_TABLESPACE"='SYSAUX'))
  64. Note
  65. -----
  66. - this is an adaptive plan

ADAPTIVE_PLAN
Syntax:ADAPTIVE_PLAN
Description:The ADAPTIVE_PLAN hint instructs the optimizer to automatically change a plan on subsequent executions of a SQL statement.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_adaptive_plans"=false;
  2. HelloDBA.com> exec sql_explain('select /*+ADAPTIVE_PLAN*/* from t_tab t where table_name = any (select max(object_name) from t_obj o where o.owner=t.owner group by owner)''TYPICAL');
  3. Plan hash value: 3428189515
  4. --------------------------------------------------------------------------------------
  5. | Id  | Operation               | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
  6. --------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT        |            |     1 |   337 |   468   (1)| 00:00:01 |
  8. |*  1 |  HASH JOIN SEMI         |            |     1 |   337 |   468   (1)| 00:00:01 |
  9. |   2 |   TABLE ACCESS FULL     | T_TAB      |  2426 |   613K|    29   (0)| 00:00:01 |
  10. |   3 |   VIEW                  | VW_SQ_1    | 15577 |  1186K|   438   (1)| 00:00:01 |
  11. |*  4 |    HASH JOIN            |            | 15577 |  2296K|   438   (1)| 00:00:01 |
  12. |   5 |     VIEW                | VW_GBD_4   |    26 |  3432 |   433   (1)| 00:00:01 |
  13. |   6 |      HASH GROUP BY      |            |    26 |   806 |   433   (1)| 00:00:01 |
  14. |   7 |       TABLE ACCESS FULL | T_OBJ      | 92299 |  2794K|   431   (1)| 00:00:01 |
  15. |   8 |     INDEX FAST FULL SCAN| T_TAB_IDX1 |  2426 | 46094 |     5   (0)| 00:00:01 |
  16. --------------------------------------------------------------------------------------
  17. Predicate Information (identified by operation id):
  18. ---------------------------------------------------
  19. 1 - access("TABLE_NAME"="MAX(OBJECT_NAME)" AND "ITEM_1"=ROWID)
  20. 4 - access("ITEM_1"="T"."OWNER")
  21. Note
  22. -----
  23. - this is an adaptive plan

NO_ADAPTIVE_PLAN
Syntax:NO_ADAPTIVE_PLAN
Description:The NO_ADAPTIVE_PLAN hint instructs the optimizer to automatically change a plan on subsequent executions of a SQL statement.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_adaptive_plans"=true;
  2. HelloDBA.com> exec sql_explain('select /*+NO_ADAPTIVE_PLAN*/* from t_tab t where table_name = any (select max(object_name) from t_obj o where o.owner=t.owner group by owner)''TYPICAL');
  3. Plan hash value: 3428189515
  4. --------------------------------------------------------------------------------------
  5. | Id  | Operation               | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
  6. --------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT        |            |     1 |   337 |   468   (1)| 00:00:01 |
  8. |*  1 |  HASH JOIN SEMI         |            |     1 |   337 |   468   (1)| 00:00:01 |
  9. |   2 |   TABLE ACCESS FULL     | T_TAB      |  2426 |   613K|    29   (0)| 00:00:01 |
  10. |   3 |   VIEW                  | VW_SQ_1    | 15577 |  1186K|   438   (1)| 00:00:01 |
  11. |*  4 |    HASH JOIN            |            | 15577 |  2296K|   438   (1)| 00:00:01 |
  12. |   5 |     VIEW                | VW_GBD_4   |    26 |  3432 |   433   (1)| 00:00:01 |
  13. |   6 |      HASH GROUP BY      |            |    26 |   806 |   433   (1)| 00:00:01 |
  14. |   7 |       TABLE ACCESS FULL | T_OBJ      | 92299 |  2794K|   431   (1)| 00:00:01 |
  15. |   8 |     INDEX FAST FULL SCAN| T_TAB_IDX1 |  2426 | 46094 |     5   (0)| 00:00:01 |
  16. --------------------------------------------------------------------------------------

BATCH_TABLE_ACCESS_BY_ROWID
Syntax:BATCH_TABLE_ACCESS_BY_ROWID ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The BATCH_TABLE_ACCESS_BY_ROWID hint instructs the optimizer to retrieve a few rowids from the index, then access the rows in data block order, to reduce accessing data block times .

SQL??
  1. HelloDBA.com> alter session set "_optimizer_batch_table_access_by_rowid"=false;
  2. HelloDBA.com> exec sql_explain('select /*+BATCH_TABLE_ACCESS_BY_ROWID(o)*/* from t_obj1 o where owner=''SYS''''typical');
  3. Plan hash value: 323892535
  4. ---------------------------------------------------------------------------------------------------
  5. | Id  | Operation                           | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ---------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT                    |             |     1 |   115 |   120   (0)| 00:00:01 |
  8. |   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| T_OBJ1      |     1 |   115 |   120   (0)| 00:00:01 |
  9. |*  2 |   INDEX RANGE SCAN                  | T_OBJ1_IDX1 |  3550 |       |     9   (0)| 00:00:01 |
  10. ---------------------------------------------------------------------------------------------------

NO_BATCH_TABLE_ACCESS_BY_ROWID
Syntax:BATCH_TABLE_ACCESS_BY_ROWID ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The BATCH_TABLE_ACCESS_BY_ROWID hint instructs the optimizer not use batch table access by rowid.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_batch_table_access_by_rowid"=true;
  2. HelloDBA.com> exec sql_explain('select /*+NO_BATCH_TABLE_ACCESS_BY_ROWID(o)*/* from t_obj1 o where owner=''SYS''''typical');
  3. Plan hash value: 1936150373
  4. ----------------------------------------------------------------------------
  5. | Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ----------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT  |        | 42109 |  4729K|   431   (1)| 00:00:01 |
  8. |*  1 |  TABLE ACCESS FULL| T_OBJ1 | 42109 |  4729K|   431   (1)| 00:00:01 |
  9. ----------------------------------------------------------------------------

CLUSTERING
Syntax:CLUSTERING ( [ @ queryblock ] )
Description: This hint is valid only for INSERT and MERGE operations on tables that are enabled for attribute clustering. The CLUSTERING hint enables attribute clustering for direct-path inserts (serial or parallel). This results in partially-clustered data, that is, data that is clustered per each insert or merge operation. This hint overrides a NO ON LOAD setting in the DDL that created or altered the table. This hint has no effect on tables that are not enabled for attribute clustering.

SQL??
  1. HelloDBA.com> alter table t_obj1 add clustering by interleaved order (owner) no on load no on data movement;
  2. HelloDBA.com> exec sql_explain('insert /*+APPEND CLUSTERING*/ into t_obj1 select * from t_obj t''TYPICAL');
  3. Plan hash value: 761959232
  4. ---------------------------------------------------------------------------------------------------
  5. | Id  | Operation                        | Name   | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
  6. ---------------------------------------------------------------------------------------------------
  7. |   0 | INSERT STATEMENT                 |        | 92299 |    10M|       |  2824   (1)| 00:00:01 |
  8. |   1 |  LOAD AS SELECT                  | T_OBJ1 |       |       |       |            |          |
  9. |   2 |   OPTIMIZER STATISTICS GATHERING |        | 92299 |    10M|       |  2824   (1)| 00:00:01 |
  10. |   3 |    SORT ORDER BY                 |        | 92299 |    10M|    13M|  2824   (1)| 00:00:01 |
  11. |   4 |     TABLE ACCESS FULL            | T_OBJ  | 92299 |    10M|       |   431   (1)| 00:00:01 |
  12. ---------------------------------------------------------------------------------------------------

NO_CLUSTERING
Syntax:NO_CLUSTERING ( [ @ queryblock ] )
Description: This hint is valid only for INSERT and MERGE operations on tables that are enabled for attribute clustering. The NO_CLUSTERING hint disables attribute clustering for direct-path inserts (serial or parallel). This hint overrides a YES ON LOAD setting in the DDL that created or altered the table. This hint has no effect on tables that are not enabled for attribute clustering.

SQL??
  1. HelloDBA.com> alter table t_obj1 drop clustering;
  2. HelloDBA.com> alter table t_obj1 add clustering by interleaved order (owner) yes on load yes on data movement;
  3. HelloDBA.com> exec sql_explain('insert /*+APPEND NO_CLUSTERING*/ into t_obj1 select * from t_obj t''TYPICAL');
  4. Plan hash value: 1252610668
  5. -------------------------------------------------------------------------------------------
  6. | Id  | Operation                        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
  7. -------------------------------------------------------------------------------------------
  8. |   0 | INSERT STATEMENT                 |        | 92299 |    10M|   431   (1)| 00:00:01 |
  9. |   1 |  LOAD AS SELECT                  | T_OBJ1 |       |       |            |          |
  10. |   2 |   OPTIMIZER STATISTICS GATHERING |        | 92299 |    10M|   431   (1)| 00:00:01 |
  11. |   3 |    TABLE ACCESS FULL             | T_OBJ  | 92299 |    10M|   431   (1)| 00:00:01 |
  12. -------------------------------------------------------------------------------------------

ZONEMAP
Syntax:ZONEMAP ( [ @ queryblock ] tablespec { SCAN | JOIN | PARTITION } ) 
Description: The ZONEMAP hint enables the use of a zone map for different types of pruning. This hint overrides an ENABLE PRUNING setting in the DDL that created or altered the zone map.
Specify one of the following options:
SCAN - Enables the use of a zone map for scan pruning.
JOIN - Enables the use of a zone map for join pruning.
PARTITION - Enables the use of a zone map for partition pruning.

NOTE: Target table should be stored in a tablespace residing on Oracle Exadata storage and then define a ZONEMAP on it.

NO_ZONEMAP
Syntax:NO_ZONEMAP ( [ @ queryblock ] tablespec { SCAN | JOIN | PARTITION } ) 
Description: The NO_ZONEMAP hint disables the use of a zone map for different types of pruning. This hint overrides an ENABLE PRUNING setting in the DDL that created or altered the zone map.
Specify one of the following options:
SCAN - Disables the use of a zone map for scan pruning.
JOIN - Disables the use of a zone map for join pruning.
PARTITION - Disables the use of a zone map for partition pruning.

CLUSTER_BY_ROWID
Syntax:CLUSTER_BY_ROWID ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The CLUSTER_BY_ROWID hint instructs the optimizer enable the cluster by rowid feature.

SQL??
  1. HelloDBA.com> exec sql_explain('select /*+CLUSTER_BY_ROWID(t)*/* from t_obj1 t where owner = :A''TYPICAL');
  2. Plan hash value: 2919409215
  3. ---------------------------------------------------------------------------------------------------
  4. | Id  | Operation                           | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
  5. ---------------------------------------------------------------------------------------------------
  6. |   0 | SELECT STATEMENT                    |             |  3550 |   398K|   120   (0)| 00:00:01 |
  7. |   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| T_OBJ1      |  3550 |   398K|   120   (0)| 00:00:01 |
  8. |   2 |   SORT CLUSTER BY ROWID             |             |  3550 |       |     9   (0)| 00:00:01 |
  9. |*  3 |    INDEX RANGE SCAN                 | T_OBJ1_IDX1 |  3550 |       |     9   (0)| 00:00:01 |
  10. ---------------------------------------------------------------------------------------------------

NO_CLUSTER_BY_ROWID
Syntax:CLUSTER_BY_ROWID ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The CLUSTER_BY_ROWID hint instructs the optimizer disable the cluster by rowid feature.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_cluster_by_rowid"=true;
  2. HelloDBA.com> exec sql_explain('select /*+NO_CLUSTER_BY_ROWID(t)*/* from t_obj1 t where owner = :A''TYPICAL');
  3. Plan hash value: 323892535
  4. ---------------------------------------------------------------------------------------------------
  5. | Id  | Operation                           | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ---------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT                    |             |  3550 |   398K|   120   (0)| 00:00:01 |
  8. |   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| T_OBJ1      |  3550 |   398K|   120   (0)| 00:00:01 |
  9. |*  2 |   INDEX RANGE SCAN                  | T_OBJ1_IDX1 |  3550 |       |     9   (0)| 00:00:01 |
  10. ---------------------------------------------------------------------------------------------------

DECORRELATE
Syntax:DECORRELATE ( [ @ queryblock ] )
Description: The DECORRELATE hint instructs the optimizer to decorrelate the subquery.

SQL??
  1. HelloDBA.com> exec sql_explain('select /*+DECORRELATE(@iv)*/owner, subobject_name, v.last_analyzed from t_obj1 o cross apply (select /*+qb_name(iv)*/max(last_analyzed) last_analyzed from t_tab t where t.table_name=o.object_name) v''TYPICAL OUTLINE');
  2. Plan hash value: 973442988
  3. -----------------------------------------------------------------------------------------
  4. | Id  | Operation             | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
  5. -----------------------------------------------------------------------------------------
  6. |   0 | SELECT STATEMENT      |                 | 92299 |  9734K|   461   (1)| 00:00:01 |
  7. |*  1 |  HASH JOIN RIGHT OUTER|                 | 92299 |  9734K|   461   (1)| 00:00:01 |
  8. |   2 |   VIEW                | VW_DCL_922C9664 |  2420 |   177K|    30   (4)| 00:00:01 |
  9. |   3 |    HASH GROUP BY      |                 |  2420 | 65340 |    30   (4)| 00:00:01 |
  10. |   4 |     TABLE ACCESS FULL | T_TAB           |  2426 | 65502 |    29   (0)| 00:00:01 |
  11. |   5 |   TABLE ACCESS FULL   | T_OBJ1          | 92299 |  2974K|   431   (1)| 00:00:01 |
  12. -----------------------------------------------------------------------------------------
  13. Outline Data
  14. -------------
  15. /*+
  16. BEGIN_OUTLINE_DATA
  17. USE_HASH_AGGREGATION(@"SEL$ACECEEBF")
  18. FULL(@"SEL$ACECEEBF" "T"@"IV")
  19. SWAP_JOIN_INPUTS(@"SEL$C872D39E" "V"@"SEL$1")
  20. USE_HASH(@"SEL$C872D39E" "V"@"SEL$1")
  21. LEADING(@"SEL$C872D39E" "O"@"SEL$1" "V"@"SEL$1")
  22. NO_ACCESS(@"SEL$C872D39E" "V"@"SEL$1")
  23. FULL(@"SEL$C872D39E" "O"@"SEL$1")
  24. OUTLINE(@"SEL$1")
  25. OUTLINE(@"SEL$2")
  26. DECORRELATE(@"IV")
  27. OUTLINE(@"SEL$ACECEEBF")
  28. MERGE(@"SEL$1")
  29. OUTLINE(@"SEL$58A6D7F6")
  30. OUTLINE(@"IV")
  31. DECORRELATE(@"SEL$ACECEEBF")
  32. OUTLINE_LEAF(@"SEL$C872D39E")
  33. DECORRELATE(@"IV")
  34. OUTLINE_LEAF(@"SEL$ACECEEBF")
  35. ALL_ROWS
  36. OPT_PARAM('star_transformation_enabled' 'true')
  37. DB_VERSION('12.1.0.2')
  38. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  39. IGNORE_OPTIM_EMBEDDED_HINTS
  40. END_OUTLINE_DATA
  41. */

NO_DECORRELATE
Syntax:NO_DECORRELATE ( [ @ queryblock ] )
Description: The NO_DECORRELATE hint instructs the optimizer not to decorrelate the subquery.

SQL??
  1. HelloDBA.com> exec sql_explain('select /*+NO_DECORRELATE(@iv)*/owner, subobject_name, v.last_analyzed from t_obj1 o cross apply (select /*+qb_name(iv)*/max(last_analyzed) last_analyzed from t_tab t where t.table_name=o.object_name) v''TYPICAL OUTLINE');
  2. Plan hash value: 882957228
  3. ----------------------------------------------------------------------------------------
  4. | Id  | Operation            | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
  5. ----------------------------------------------------------------------------------------
  6. |   0 | SELECT STATEMENT     |                 | 92299 |  3785K|  2679K  (1)| 00:01:45 |
  7. |   1 |  NESTED LOOPS        |                 | 92299 |  3785K|  2679K  (1)| 00:01:45 |
  8. |   2 |   TABLE ACCESS FULL  | T_OBJ1          | 92299 |  2974K|   431   (1)| 00:00:01 |
  9. |   3 |   VIEW               | VW_LAT_922C9664 |     1 |     9 |    29   (0)| 00:00:01 |
  10. |   4 |    SORT AGGREGATE    |                 |     1 |    27 |            |          |
  11. |*  5 |     TABLE ACCESS FULL| T_TAB           |     1 |    27 |    29   (0)| 00:00:01 |
  12. ----------------------------------------------------------------------------------------
  13. Outline Data
  14. -------------
  15. /*+
  16. BEGIN_OUTLINE_DATA
  17. FULL(@"IV" "T"@"IV")
  18. USE_NL(@"SEL$58A6D7F6" "V"@"SEL$1")
  19. LEADING(@"SEL$58A6D7F6" "O"@"SEL$1" "V"@"SEL$1")
  20. NO_ACCESS(@"SEL$58A6D7F6" "V"@"SEL$1")
  21. FULL(@"SEL$58A6D7F6" "O"@"SEL$1")
  22. OUTLINE(@"SEL$1")
  23. OUTLINE(@"SEL$2")
  24. OUTLINE(@"IV")
  25. MERGE(@"SEL$1")
  26. OUTLINE_LEAF(@"SEL$58A6D7F6")
  27. OUTLINE_LEAF(@"IV")
  28. ALL_ROWS
  29. OPT_PARAM('star_transformation_enabled' 'true')
  30. DB_VERSION('12.1.0.2')
  31. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  32. IGNORE_OPTIM_EMBEDDED_HINTS
  33. END_OUTLINE_DATA
  34. */

GATHER_OPTIMIZER_STATISTICS
Syntax:GATHER_OPTIMIZER_STATISTICS
Description: The GATHER_OPTIMIZER_STATISTICS hint instructs the optimizer to enable statistics gathering during the following types of bulk loads: 
CREATE TABLE ... AS SELECT
INSERT INTO ... SELECT into an empty table using a direct-path insert

SQL??
  1. HelloDBA.com> alter session set "_optimizer_gather_stats_on_load"=false;
  2. HelloDBA.com> exec sql_explain('insert /*+GATHER_OPTIMIZER_STATISTICS append*/into t_obj1 select * from t_obj','typical');
  3. Plan hash value: 761959232
  4. ---------------------------------------------------------------------------------------------------
  5. | Id  | Operation                        | Name   | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
  6. ---------------------------------------------------------------------------------------------------
  7. |   0 | INSERT STATEMENT                 |        | 92299 |    10M|       |  2824   (1)| 00:00:01 |
  8. |   1 |  LOAD AS SELECT                  | T_OBJ1 |       |       |       |            |          |
  9. |   2 |   OPTIMIZER STATISTICS GATHERING |        | 92299 |    10M|       |  2824   (1)| 00:00:01 |
  10. |   3 |    SORT ORDER BY                 |        | 92299 |    10M|    13M|  2824   (1)| 00:00:01 |
  11. |   4 |     TABLE ACCESS FULL            | T_OBJ  | 92299 |    10M|       |   431   (1)| 00:00:01 |
  12. ---------------------------------------------------------------------------------------------------

NO_GATHER_OPTIMIZER_STATISTICS
Syntax:NO_GATHER_OPTIMIZER_STATISTICS
Description: The NO_GATHER_OPTIMIZER_STATISTICS hint instructs the optimizer to disable statistics gathering during the following types of bulk loads:
CREATE TABLE ... AS SELECT
INSERT INTO ... SELECT into an empty table using a direct-path insert

SQL??
  1. HelloDBA.com> alter session set "_optimizer_gather_stats_on_load"=true;
  2. HelloDBA.com> exec sql_explain('insert /*+NO_GATHER_OPTIMIZER_STATISTICS append*/into t_obj1 select * from t_obj','typical');
  3. Plan hash value: 761959232
  4. --------------------------------------------------------------------------------------
  5. | Id  | Operation           | Name   | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
  6. --------------------------------------------------------------------------------------
  7. |   0 | INSERT STATEMENT    |        | 92299 |    10M|       |  2824   (1)| 00:00:01 |
  8. |   1 |  LOAD AS SELECT     | T_OBJ1 |       |       |       |            |          |
  9. |   2 |   SORT ORDER BY     |        | 92299 |    10M|    13M|  2824   (1)| 00:00:01 |
  10. |   3 |    TABLE ACCESS FULL| T_OBJ  | 92299 |    10M|       |   431   (1)| 00:00:01 |
  11. --------------------------------------------------------------------------------------

PARTIAL_JOIN
Syntax:PARTIAL_JOIN ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The PARTIAL_JOIN hint instructs the optimizer to evaluate partial join:

SQL??
  1. HelloDBA.com> alter session set "_optimizer_partial_join_eval"=false;
  2. HelloDBA.com> exec sql_explain('select /*+PARTIAL_JOIN(o)*/o.owner,o.object_name, max(t.last_analyzed) from t_tab t, t_obj o where t.owner=o.owner and t.table_name=o.object_name group by o.owner, o.object_name','typical outline');
  3. Plan hash value: 1185907781
  4. -----------------------------------------------------------------------------
  5. | Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
  6. -----------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT    |       |  1017 | 66105 |   461   (1)| 00:00:01 |
  8. |   1 |  HASH GROUP BY      |       |  1017 | 66105 |   461   (1)| 00:00:01 |
  9. |*  2 |   HASH JOIN SEMI    |       |  1017 | 66105 |   460   (1)| 00:00:01 |
  10. |   3 |    TABLE ACCESS FULL| T_TAB |  2426 | 82484 |    29   (0)| 00:00:01 |
  11. |   4 |    TABLE ACCESS FULL| T_OBJ | 92299 |  2794K|   431   (1)| 00:00:01 |
  12. -----------------------------------------------------------------------------
  13. Outline Data
  14. -------------
  15. /*+
  16. BEGIN_OUTLINE_DATA
  17. PARTIAL_JOIN(@"SEL$1" "O"@"SEL$1")
  18. USE_HASH_AGGREGATION(@"SEL$1")
  19. USE_HASH(@"SEL$1" "O"@"SEL$1")
  20. LEADING(@"SEL$1" "T"@"SEL$1" "O"@"SEL$1")
  21. FULL(@"SEL$1" "O"@"SEL$1")
  22. FULL(@"SEL$1" "T"@"SEL$1")
  23. OUTLINE_LEAF(@"SEL$1")
  24. ALL_ROWS
  25. OPT_PARAM('star_transformation_enabled' 'true')
  26. OPT_PARAM('_optimizer_partial_join_eval' 'false')
  27. DB_VERSION('12.1.0.2')
  28. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  29. IGNORE_OPTIM_EMBEDDED_HINTS
  30. END_OUTLINE_DATA
  31. */

NO_PARTIAL_JOIN
Syntax:NO_PARTIAL_JOIN ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: The NO_PARTIAL_JOIN hint instructs the optimizer not to evaluate partial join:

SQL??
  1. HelloDBA.com> alter session set "_optimizer_partial_join_eval"=true;
  2. HelloDBA.com> exec sql_explain('select /*+NO_PARTIAL_JOIN(o)*/o.owner,o.object_name, max(t.last_analyzed) from t_tab t, t_obj o where t.owner=o.owner and t.table_name=o.object_name group by o.owner, o.object_name','typical outline');
  3. Plan hash value: 887456466
  4. -----------------------------------------------------------------------------
  5. | Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
  6. -----------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT    |       |  2426 |   153K|   461   (1)| 00:00:01 |
  8. |   1 |  HASH GROUP BY      |       |  2426 |   153K|   461   (1)| 00:00:01 |
  9. |*  2 |   HASH JOIN         |       |  2426 |   153K|   460   (1)| 00:00:01 |
  10. |   3 |    TABLE ACCESS FULL| T_TAB |  2426 | 82484 |    29   (0)| 00:00:01 |
  11. |   4 |    TABLE ACCESS FULL| T_OBJ | 92299 |  2794K|   431   (1)| 00:00:01 |
  12. -----------------------------------------------------------------------------
  13. Outline Data
  14. -------------
  15. /*+
  16. BEGIN_OUTLINE_DATA
  17. USE_HASH_AGGREGATION(@"SEL$1")
  18. USE_HASH(@"SEL$1" "O"@"SEL$1")
  19. LEADING(@"SEL$1" "T"@"SEL$1" "O"@"SEL$1")
  20. FULL(@"SEL$1" "O"@"SEL$1")
  21. FULL(@"SEL$1" "T"@"SEL$1")
  22. OUTLINE_LEAF(@"SEL$1")
  23. ALL_ROWS
  24. OPT_PARAM('star_transformation_enabled' 'true')
  25. DB_VERSION('12.1.0.2')
  26. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  27. IGNORE_OPTIM_EMBEDDED_HINTS
  28. END_OUTLINE_DATA
  29. */

PARTIAL_ROLLUP_PUSHDOWN
Syntax:PARTIAL_ROLLUP_PUSHDOWN ( [ @ queryblock ] )
Description: The PARTIAL_ROLLUP_PUSHDOWN hint instructs the optimizer to perform partial rollup pushdown for parallel execution

SQL??
  1. HelloDBA.com> alter session set "_px_partial_rollup_pushdown"=off;
  2. HelloDBA.com> exec sql_explain('select /*+parallel(8) PARTIAL_ROLLUP_PUSHDOWN*/ owner, status, count(object_name) from t_obj group by owner, rollup(status)''TYPICAL OUTLINE');
  3. Plan hash value: 2217003864
  4. -------------------------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation                             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. -------------------------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT                      |          |    37 |  1406 |    61   (2)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR                       |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM)                 | :TQ10001 |    37 |  1406 |    61   (2)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
  10. |   3 |    SORT GROUP BY ROLLUP COLLECTOR     |          |    37 |  1406 |    61   (2)| 00:00:01 |  Q1,01 | PCWP |            |
  11. |   4 |     PX RECEIVE                        |          |    37 |  1406 |    61   (2)| 00:00:01 |  Q1,01 | PCWP |            |
  12. |   5 |      PX SEND HASH                     | :TQ10000 |    37 |  1406 |    61   (2)| 00:00:01 |  Q1,00 | P->P | HASH       |
  13. |   6 |       SORT GROUP BY ROLLUP DISTRIBUTOR|          |    37 |  1406 |    61   (2)| 00:00:01 |  Q1,00 | PCWP |            |
  14. |   7 |        HASH GROUP BY                  |          |    37 |  1406 |    61   (2)| 00:00:01 |  Q1,00 | PCWP |            |
  15. |   8 |         PX BLOCK ITERATOR             |          | 92299 |  3425K|    60   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  16. |   9 |          TABLE ACCESS FULL            | T_OBJ    | 92299 |  3425K|    60   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  17. -------------------------------------------------------------------------------------------------------------------------------
  18. Outline Data
  19. -------------
  20. /*+
  21. BEGIN_OUTLINE_DATA
  22. USE_HASH_AGGREGATION(@"SEL$1")
  23. FULL(@"SEL$1" "T_OBJ"@"SEL$1")
  24. OUTLINE_LEAF(@"SEL$1")
  25. ALL_ROWS
  26. OPT_PARAM('star_transformation_enabled' 'true')
  27. OPT_PARAM('_px_partial_rollup_pushdown' 'off')
  28. DB_VERSION('12.1.0.2')
  29. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  30. IGNORE_OPTIM_EMBEDDED_HINTS
  31. END_OUTLINE_DATA
  32. */

NO_PARTIAL_ROLLUP_PUSHDOWN
Syntax:NO_PARTIAL_ROLLUP_PUSHDOWN ( [ @ queryblock ] )
Description: The NO_PARTIAL_ROLLUP_PUSHDOWN hint instructs the optimizer not to perform partial rollup pushdown for parallel execution

SQL??
  1. HelloDBA.com> alter session set "_px_partial_rollup_pushdown"=adaptive;
  2. HelloDBA.com> exec sql_explain('select /*+parallel(8) NO_PARTIAL_ROLLUP_PUSHDOWN*/ owner, status, count(object_name) from t_obj group by owner, rollup(status)''TYPICAL OUTLINE');
  3. Plan hash value: 3061208371
  4. -----------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation               | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. -----------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT        |          |    37 |  1406 |    61   (2)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR         |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM)   | :TQ10001 |    37 |  1406 |    61   (2)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
  10. |   3 |    SORT GROUP BY ROLLUP |          |    37 |  1406 |    61   (2)| 00:00:01 |  Q1,01 | PCWP |            |
  11. |   4 |     PX RECEIVE          |          | 92299 |  3425K|    60   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  12. |   5 |      PX SEND HASH       | :TQ10000 | 92299 |  3425K|    60   (0)| 00:00:01 |  Q1,00 | P->P | HASH       |
  13. |   6 |       PX BLOCK ITERATOR |          | 92299 |  3425K|    60   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  14. |   7 |        TABLE ACCESS FULL| T_OBJ    | 92299 |  3425K|    60   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  15. -----------------------------------------------------------------------------------------------------------------
  16. Outline Data
  17. -------------
  18. /*+
  19. BEGIN_OUTLINE_DATA
  20. FULL(@"SEL$1" "T_OBJ"@"SEL$1")
  21. OUTLINE_LEAF(@"SEL$1")
  22. ALL_ROWS
  23. OPT_PARAM('star_transformation_enabled' 'true')
  24. DB_VERSION('12.1.0.2')
  25. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  26. IGNORE_OPTIM_EMBEDDED_HINTS
  27. END_OUTLINE_DATA
  28. */

PQ_CONCURRENT_UNION
Syntax:PQ_CONCURRENT_UNION [ ( @ queryblock ) ]
Description: The PQ_CONCURRENT_UNION hint instructs the optimizer to enable concurrent processing of UNION and UNION ALL operations.

SQL??
  1. HelloDBA.com> alter session set "_px_concurrent"=false;
  2. HelloDBA.com> exec sql_explain('select /*+PQ_CONCURRENT_UNION*/ * from (select * from t_obj union all select * from t_obj1)''TYPICAL OUTLINE');
  3. Plan hash value: 1664138491
  4. ----------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. ----------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT       |          |   184K|    64M|   863   (1)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR        |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM)  | :TQ10000 |   184K|    64M|   863   (1)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
  10. |   3 |    VIEW                |          |   184K|    64M|   863   (1)| 00:00:01 |  Q1,00 | PCWP |            |
  11. |   4 |     UNION-ALL          |          |       |       |            |          |  Q1,00 | PCWP |            |
  12. |   5 |      PX SELECTOR       |          |       |       |            |          |  Q1,00 | PCWP |            |
  13. |   6 |       TABLE ACCESS FULL| T_OBJ    | 92299 |    10M|   431   (1)| 00:00:01 |  Q1,00 | PCWP |            |
  14. |   7 |      PX SELECTOR       |          |       |       |            |          |  Q1,00 | PCWP |            |
  15. |   8 |       TABLE ACCESS FULL| T_OBJ1   | 92299 |    10M|   431   (1)| 00:00:01 |  Q1,00 | PCWP |            |
  16. ----------------------------------------------------------------------------------------------------------------
  17. Outline Data
  18. -------------
  19. /*+
  20. BEGIN_OUTLINE_DATA
  21. FULL(@"SEL$2" "T_OBJ"@"SEL$2")
  22. FULL(@"SEL$3" "T_OBJ1"@"SEL$3")
  23. PQ_CONCURRENT_UNION(@"SET$1")
  24. NO_ACCESS(@"SEL$1" "from$_subquery$_001"@"SEL$1")
  25. OUTLINE_LEAF(@"SEL$1")
  26. OUTLINE_LEAF(@"SET$1")
  27. OUTLINE_LEAF(@"SEL$3")
  28. OUTLINE_LEAF(@"SEL$2")
  29. ALL_ROWS
  30. OPT_PARAM('star_transformation_enabled' 'true')
  31. OPT_PARAM('_px_concurrent' 'false')
  32. DB_VERSION('12.1.0.2')
  33. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  34. IGNORE_OPTIM_EMBEDDED_HINTS
  35. END_OUTLINE_DATA
  36. */

NO_PQ_CONCURRENT_UNION
Syntax:NO_PQ_CONCURRENT_UNION [ ( @ queryblock ) ]
Description: The NO_PQ_CONCURRENT_UNION hint instructs the optimizer to disable concurrent processing of UNION and UNION ALL operations.

SQL??
  1. HelloDBA.com> alter session set "_px_concurrent"=true;
  2. HelloDBA.com> exec sql_explain('select /*+parallel NO_PQ_CONCURRENT_UNION*/ * from (select * from t_obj union all select * from t_obj1)''TYPICAL OUTLINE');
  3. Plan hash value: 496087642
  4. ----------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. ----------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT       |          |   184K|    64M|   479   (1)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR        |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM)  | :TQ10000 |   184K|    64M|   479   (1)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
  10. |   3 |    VIEW                |          |   184K|    64M|   479   (1)| 00:00:01 |  Q1,00 | PCWP |            |
  11. |   4 |     UNION-ALL          |          |       |       |            |          |  Q1,00 | PCWP |            |
  12. |   5 |      PX BLOCK ITERATOR |          | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | PCWC |            |
  13. |   6 |       TABLE ACCESS FULL| T_OBJ    | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | PCWP |            |
  14. |   7 |      PX BLOCK ITERATOR |          | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | PCWC |            |
  15. |   8 |       TABLE ACCESS FULL| T_OBJ1   | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | PCWP |            |
  16. ----------------------------------------------------------------------------------------------------------------
  17. Outline Data
  18. -------------
  19. /*+
  20. BEGIN_OUTLINE_DATA
  21. FULL(@"SEL$2" "T_OBJ"@"SEL$2")
  22. FULL(@"SEL$3" "T_OBJ1"@"SEL$3")
  23. NO_ACCESS(@"SEL$1" "from$_subquery$_001"@"SEL$1")
  24. OUTLINE_LEAF(@"SEL$1")
  25. OUTLINE_LEAF(@"SET$1")
  26. OUTLINE_LEAF(@"SEL$3")
  27. OUTLINE_LEAF(@"SEL$2")
  28. SHARED(2)
  29. ALL_ROWS
  30. OPT_PARAM('star_transformation_enabled' 'true')
  31. DB_VERSION('12.1.0.2')
  32. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  33. IGNORE_OPTIM_EMBEDDED_HINTS
  34. END_OUTLINE_DATA
  35. */

PQ_FILTER
Syntax:PQ_FILTER ( SERIAL | NONE | HASH | RANDOM )
Description: The PQ_FILTER hint instructs the optimizer on how to process rows when filtering correlated subqueries.
SERIAL: Process rows serially on the left and right sides of the filter. Use this option when the overhead of parallelization is too high for the query, for example, when the left side has very few rows.
NONE: Process rows in parallel on the left and right sides of the filter. Use this option when there is no skew in the distribution of the data on the left side of the filter and you would like to avoid distribution of the left side, for example, due to the large size of the left side.
HASH: Process rows in parallel on the left side of the filter using a hash distribution. Process rows serially on the right side of the filter. Use this option when there is no skew in the distribution of data on the left side of the filter.
RANDOM: Process rows in parallel on the left side of the filter using a random distribution. Process rows serially on the right side of the filter. Use this option when there is skew in the distribution of data on the left side of the filter.

SQL??
  1. HelloDBA.com> alter session set "_px_filter_parallelized"=false;
  2. HelloDBA.com> exec sql_explain('select /*+parallel PQ_FILTER(HASH)*/ * from t_obj1 o where created in (select /*+no_unnest*/last_analyzed from t_tab t where tablespace_name like :A)''TYPICAL OUTLINE');
  3. Plan hash value: 2440581449
  4. ------------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation                | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. ------------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT         |          |   110 | 12650 | 22159   (1)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR          |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM)    | :TQ10001 | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
  10. |   3 |    BUFFER SORT           |          |   110 | 12650 |            |          |  Q1,01 | PCWP |            |
  11. |*  4 |     FILTER               |          |       |       |            |          |  Q1,01 | PCWP |            |
  12. |   5 |      PX RECEIVE          |          | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,01 | PCWP |            |
  13. |   6 |       PX SEND HASH       | :TQ10000 | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | P->P | HASH       |
  14. |   7 |        PX BLOCK ITERATOR |          | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | PCWC |            |
  15. |   8 |         TABLE ACCESS FULL| T_OBJ1   | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | PCWP |            |
  16. |*  9 |      TABLE ACCESS FULL   | T_TAB    |     2 |    30 |    26   (0)| 00:00:01 |        |      |            |
  17. ------------------------------------------------------------------------------------------------------------------
  18. Outline Data
  19. -------------
  20. /*+
  21. BEGIN_OUTLINE_DATA
  22. FULL(@"SEL$2" "T"@"SEL$2")
  23. PQ_FILTER(@"SEL$1" HASH)
  24. FULL(@"SEL$1" "O"@"SEL$1")
  25. OUTLINE_LEAF(@"SEL$1")
  26. OUTLINE_LEAF(@"SEL$2")
  27. SHARED(2)
  28. ALL_ROWS
  29. OPT_PARAM('star_transformation_enabled' 'true')
  30. OPT_PARAM('_px_filter_parallelized' 'false')
  31. DB_VERSION('12.1.0.2')
  32. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  33. IGNORE_OPTIM_EMBEDDED_HINTS
  34. END_OUTLINE_DATA
  35. */
  36. Predicate Information (identified by operation id):
  37. ---------------------------------------------------
  38. 4 - filter( EXISTS (SELECT /*+ NO_UNNEST */ 0 FROM "T_TAB" "T" WHERE "LAST_ANALYZED"=:B1 AND
  39. "TABLESPACE_NAME" LIKE :A))
  40. 9 - filter("LAST_ANALYZED"=:B1 AND "TABLESPACE_NAME" LIKE :A)
  41. HelloDBA.com> alter session set "_px_filter_parallelized"=true;
  42. HelloDBA.com> exec sql_explain('select /*+parallel PQ_FILTER(SERIAL)*/ * from t_obj1 o where created in (select /*+no_unnest*/last_analyzed from t_tab t where tablespace_name like :A)''TYPICAL OUTLINE');
  43. Plan hash value: 3734482086
  44. ---------------------------------------------------------------------------------------------------------------
  45. | Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  46. ---------------------------------------------------------------------------------------------------------------
  47. |   0 | SELECT STATEMENT      |          |   110 | 12650 | 12409   (1)| 00:00:01 |        |      |            |
  48. |*  1 |  FILTER               |          |       |       |            |          |        |      |            |
  49. |   2 |   PX COORDINATOR      |          |       |       |            |          |        |      |            |
  50. |   3 |    PX SEND QC (RANDOM)| :TQ20000 | 92299 |    10M|   240   (1)| 00:00:01 |  Q2,00 | P->S | QC (RAND)  |
  51. |   4 |     PX BLOCK ITERATOR |          | 92299 |    10M|   240   (1)| 00:00:01 |  Q2,00 | PCWC |            |
  52. |   5 |      TABLE ACCESS FULL| T_OBJ1   | 92299 |    10M|   240   (1)| 00:00:01 |  Q2,00 | PCWP |            |
  53. |   6 |   PX COORDINATOR      |          |       |       |            |          |        |      |            |
  54. |   7 |    PX SEND QC (RANDOM)| :TQ10000 |     2 |    30 |    14   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
  55. |   8 |     PX BLOCK ITERATOR |          |     2 |    30 |    14   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  56. |*  9 |      TABLE ACCESS FULL| T_TAB    |     2 |    30 |    14   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  57. ---------------------------------------------------------------------------------------------------------------
  58. Outline Data
  59. -------------
  60. /*+
  61. BEGIN_OUTLINE_DATA
  62. FULL(@"SEL$2" "T"@"SEL$2")
  63. PQ_FILTER(@"SEL$1" SERIAL)
  64. FULL(@"SEL$1" "O"@"SEL$1")
  65. OUTLINE_LEAF(@"SEL$1")
  66. OUTLINE_LEAF(@"SEL$2")
  67. SHARED(2)
  68. ALL_ROWS
  69. OPT_PARAM('star_transformation_enabled' 'true')
  70. DB_VERSION('12.1.0.2')
  71. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  72. IGNORE_OPTIM_EMBEDDED_HINTS
  73. END_OUTLINE_DATA
  74. */

PQ_DISTRIBUTE_WINDOW
Syntax:PQ_DISTRIBUTE_WINDOW ( [ @ queryblock ] 1|2 )
Description: The PQ_DISTRIBUTE_WINDOW hint instructs the optimizer on how to distribute rows generated by window functions.

SQL??
  1. HelloDBA.com> exec sql_explain('select /*+parallel PQ_DISTRIBUTE_WINDOW(1)*/table_name, count(1) over (partition by table_name) cnt from t_tab t''TYPICAL OUTLINE');
  2. Plan hash value: 4185789934
  3. ----------------------------------------------------------------------------------------------------------------------
  4. | Id  | Operation                  | Name       | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  5. ----------------------------------------------------------------------------------------------------------------------
  6. |   0 | SELECT STATEMENT           |            |  2426 | 46094 |     4  (25)| 00:00:01 |        |      |            |
  7. |   1 |  PX COORDINATOR            |            |       |       |            |          |        |      |            |
  8. |   2 |   PX SEND QC (RANDOM)      | :TQ10001   |  2426 | 46094 |     4  (25)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
  9. |   3 |    WINDOW SORT             |            |  2426 | 46094 |     4  (25)| 00:00:01 |  Q1,01 | PCWP |            |
  10. |   4 |     PX RECEIVE             |            |  2426 | 46094 |     3   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  11. |   5 |      PX SEND HASH          | :TQ10000   |  2426 | 46094 |     3   (0)| 00:00:01 |  Q1,00 | P->P | HASH       |
  12. |   6 |       PX BLOCK ITERATOR    |            |  2426 | 46094 |     3   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  13. |   7 |        INDEX FAST FULL SCAN| T_TAB_IDX1 |  2426 | 46094 |     3   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  14. ----------------------------------------------------------------------------------------------------------------------
  15. Outline Data
  16. -------------
  17. /*+
  18. BEGIN_OUTLINE_DATA
  19. PQ_DISTRIBUTE_WINDOW(@"SEL$1" 1)
  20. INDEX_FFS(@"SEL$1" "T"@"SEL$1" ("T_TAB"."OWNER" "T_TAB"."TABLE_NAME"))
  21. OUTLINE_LEAF(@"SEL$1")
  22. SHARED(2)
  23. ALL_ROWS
  24. OPT_PARAM('star_transformation_enabled' 'true')
  25. DB_VERSION('12.1.0.2')
  26. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  27. IGNORE_OPTIM_EMBEDDED_HINTS
  28. END_OUTLINE_DATA
  29. */
  30. HelloDBA.com> exec sql_explain('select /*+parallel PQ_DISTRIBUTE_WINDOW(2)*/table_name, count(1) over (partition by table_name) cnt from t_tab t''TYPICAL OUTLINE');
  31. Plan hash value: 1125815052
  32. ------------------------------------------------------------------------------------------------------------------------
  33. | Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  34. ------------------------------------------------------------------------------------------------------------------------
  35. |   0 | SELECT STATEMENT             |            |  2426 | 46094 |     4  (25)| 00:00:01 |        |      |            |
  36. |   1 |  PX COORDINATOR              |            |       |       |            |          |        |      |            |
  37. |   2 |   PX SEND QC (RANDOM)        | :TQ10001   |  2426 | 46094 |     4  (25)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
  38. |   3 |    WINDOW CONSOLIDATOR BUFFER|            |  2426 | 46094 |     4  (25)| 00:00:01 |  Q1,01 | PCWP |            |
  39. |   4 |     PX RECEIVE               |            |  2426 | 46094 |     4  (25)| 00:00:01 |  Q1,01 | PCWP |            |
  40. |   5 |      PX SEND HASH            | :TQ10000   |  2426 | 46094 |     4  (25)| 00:00:01 |  Q1,00 | P->P | HASH       |
  41. |   6 |       WINDOW SORT            |            |  2426 | 46094 |     4  (25)| 00:00:01 |  Q1,00 | PCWP |            |
  42. |   7 |        PX BLOCK ITERATOR     |            |  2426 | 46094 |     3   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  43. |   8 |         INDEX FAST FULL SCAN | T_TAB_IDX1 |  2426 | 46094 |     3   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  44. ------------------------------------------------------------------------------------------------------------------------
  45. Outline Data
  46. -------------
  47. /*+
  48. BEGIN_OUTLINE_DATA
  49. PQ_DISTRIBUTE_WINDOW(@"SEL$1" 2)
  50. INDEX_FFS(@"SEL$1" "T"@"SEL$1" ("T_TAB"."OWNER" "T_TAB"."TABLE_NAME"))
  51. OUTLINE_LEAF(@"SEL$1")
  52. SHARED(2)
  53. ALL_ROWS
  54. OPT_PARAM('star_transformation_enabled' 'true')
  55. DB_VERSION('12.1.0.2')
  56. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  57. IGNORE_OPTIM_EMBEDDED_HINTS
  58. END_OUTLINE_DATA
  59. */

PQ_REPLICATE
Syntax:PQ_REPLICATE ( [ @ queryblock ] tablespec )
Description: The PQ_REPLICATE hint instructs the optimizer to enables replication of small table scans.

SQL??
  1. HelloDBA.com> alter session set "_px_replication_enabled"=false;
  2. HelloDBA.com> exec sql_explain('select /*+parallel PQ_REPLICATE(o)*/* from t_obj o, t_tab t where o.owner=t.owner and object_name like :A''TYPICAL OUTLINE');
  3. Plan hash value: 2038113948
  4. ---------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. ---------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT      |          |  2764K|   986M|   259   (2)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR       |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM) | :TQ10000 |  2764K|   986M|   259   (2)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
  10. |*  3 |    HASH JOIN          |          |  2764K|   986M|   259   (2)| 00:00:01 |  Q1,00 | PCWP |            |
  11. |   4 |     PX BLOCK ITERATOR |          |  2426 |   613K|    16   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  12. |   5 |      TABLE ACCESS FULL| T_TAB    |  2426 |   613K|    16   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  13. |*  6 |     TABLE ACCESS FULL | T_OBJ    |  4615 |   518K|   239   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  14. ---------------------------------------------------------------------------------------------------------------
  15. Outline Data
  16. -------------
  17. /*+
  18. BEGIN_OUTLINE_DATA
  19. PQ_REPLICATE(@"SEL$1" "O"@"SEL$1")
  20. PQ_DISTRIBUTE(@"SEL$1" "O"@"SEL$1" NONE BROADCAST)
  21. USE_HASH(@"SEL$1" "O"@"SEL$1")
  22. LEADING(@"SEL$1" "T"@"SEL$1" "O"@"SEL$1")
  23. FULL(@"SEL$1" "O"@"SEL$1")
  24. FULL(@"SEL$1" "T"@"SEL$1")
  25. OUTLINE_LEAF(@"SEL$1")
  26. SHARED(2)
  27. ALL_ROWS
  28. OPT_PARAM('star_transformation_enabled' 'true')
  29. OPT_PARAM('_px_replication_enabled' 'false')
  30. DB_VERSION('12.1.0.2')
  31. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  32. IGNORE_OPTIM_EMBEDDED_HINTS
  33. END_OUTLINE_DATA
  34. */

NO_PQ_REPLICATE
Syntax:NO_PQ_REPLICATE ( [ @ queryblock ] tablespec )
Description: The NO_PQ_REPLICATE hint instructs the optimizer to disables replication of small table scans.

SQL??
  1. HelloDBA.com> alter session set "_px_replication_enabled"=true;
  2. HelloDBA.com> exec sql_explain('select /*+parallel NO_PQ_REPLICATE(o)*/* from t_obj o, t_tab t where o.owner=t.owner and object_name like :A''TYPICAL OUTLINE');
  3. Plan hash value: 2305795279
  4. -----------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation               | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. -----------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT        |          |  2764K|   986M|   259   (2)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR         |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM)   | :TQ10001 |  2764K|   986M|   259   (2)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
  10. |*  3 |    HASH JOIN BUFFERED   |          |  2764K|   986M|   259   (2)| 00:00:01 |  Q1,01 | PCWP |            |
  11. |   4 |     PX BLOCK ITERATOR   |          |  2426 |   613K|    16   (0)| 00:00:01 |  Q1,01 | PCWC |            |
  12. |   5 |      TABLE ACCESS FULL  | T_TAB    |  2426 |   613K|    16   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  13. |   6 |     PX RECEIVE          |          |  4615 |   518K|   239   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  14. |   7 |      PX SEND BROADCAST  | :TQ10000 |  4615 |   518K|   239   (0)| 00:00:01 |  Q1,00 | P->P | BROADCAST  |
  15. |   8 |       PX BLOCK ITERATOR |          |  4615 |   518K|   239   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  16. |*  9 |        TABLE ACCESS FULL| T_OBJ    |  4615 |   518K|   239   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  17. -----------------------------------------------------------------------------------------------------------------
  18. Outline Data
  19. -------------
  20. /*+
  21. BEGIN_OUTLINE_DATA
  22. PQ_DISTRIBUTE(@"SEL$1" "O"@"SEL$1" NONE BROADCAST)
  23. USE_HASH(@"SEL$1" "O"@"SEL$1")
  24. LEADING(@"SEL$1" "T"@"SEL$1" "O"@"SEL$1")
  25. FULL(@"SEL$1" "O"@"SEL$1")
  26. FULL(@"SEL$1" "T"@"SEL$1")
  27. OUTLINE_LEAF(@"SEL$1")
  28. SHARED(2)
  29. ALL_ROWS
  30. OPT_PARAM('star_transformation_enabled' 'true')
  31. DB_VERSION('12.1.0.2')
  32. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  33. IGNORE_OPTIM_EMBEDDED_HINTS
  34. END_OUTLINE_DATA
  35. */

PQ_SKEW
Syntax:PQ_SKEW ( [ @ queryblock ] tablespec )
Description: The PQ_SKEW hint advises the optimizer that the distribution of the values of the join keys for a parallel join is highly skewed?hat is, a high percentage of rows have the same join key values. The table specified in tablespec is the probe table of the hash join.
Note: DOP should be larger than 2

SQL??
  1. HelloDBA.com> alter session set "_px_join_skew_handling"=false;
  2. HelloDBA.com> exec sql_explain('select /*+parallel(8) PQ_SKEW(O) pq_distribute(O hash hash)*/* from t_obj o, t_tab t where o.owner=t.owner''TYPICAL OUTLINE');
  3. Plan hash value: 1404870264
  4. ------------------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation                      | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. ------------------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT               |          |    55M|    19G|    83  (23)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR                |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM)          | :TQ10002 |    55M|    19G|    83  (23)| 00:00:01 |  Q1,02 | P->S | QC (RAND)  |
  10. |*  3 |    HASH JOIN BUFFERED          |          |    55M|    19G|    83  (23)| 00:00:01 |  Q1,02 | PCWP |            |
  11. |   4 |     PX RECEIVE                 |          |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,02 | PCWP |            |
  12. |   5 |      PX SEND HYBRID HASH       | :TQ10000 |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,00 | P->P | HYBRID HASH|
  13. |   6 |       STATISTICS COLLECTOR     |          |       |       |            |          |  Q1,00 | PCWC |            |
  14. |   7 |        PX BLOCK ITERATOR       |          |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  15. |   8 |         TABLE ACCESS FULL      | T_TAB    |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  16. |   9 |     PX RECEIVE                 |          | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,02 | PCWP |            |
  17. |  10 |      PX SEND HYBRID HASH (SKEW)| :TQ10001 | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,01 | P->P | HYBRID HASH|
  18. |  11 |       PX BLOCK ITERATOR        |          | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,01 | PCWC |            |
  19. |  12 |        TABLE ACCESS FULL       | T_OBJ    | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  20. ------------------------------------------------------------------------------------------------------------------------
  21. Outline Data
  22. -------------
  23. /*+
  24. BEGIN_OUTLINE_DATA
  25. PQ_SKEW(@"SEL$1" "O"@"SEL$1")
  26. PQ_DISTRIBUTE(@"SEL$1" "O"@"SEL$1" HASH HASH)
  27. USE_HASH(@"SEL$1" "O"@"SEL$1")
  28. LEADING(@"SEL$1" "T"@"SEL$1" "O"@"SEL$1")
  29. FULL(@"SEL$1" "O"@"SEL$1")
  30. FULL(@"SEL$1" "T"@"SEL$1")
  31. OUTLINE_LEAF(@"SEL$1")
  32. ALL_ROWS
  33. OPT_PARAM('star_transformation_enabled' 'true')
  34. OPT_PARAM('_px_join_skew_handling' 'false')
  35. DB_VERSION('12.1.0.2')
  36. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  37. IGNORE_OPTIM_EMBEDDED_HINTS
  38. END_OUTLINE_DATA
  39. */
  40. Note
  41. -----
  42. - Degree of Parallelism is 8 because of hint

NO_PQ_SKEW
Syntax:NO_PQ_SKEW ( [ @ queryblock ] tablespec )
Description: The NO_PQ_SKEW hint advises the optimizer that the distribution of the values of the join keys for a parallel join is not skewed?hat is, a high percentage of rows do not have the same join key values. The table specified in tablespec is the probe table of the hash join.

SQL??
  1. HelloDBA.com> alter session set "_px_join_skew_handling"=true;
  2. HelloDBA.com> exec sql_explain('select /*+parallel(8) NO_PQ_SKEW(O) pq_distribute(O hash hash)*/* from t_obj o, t_tab t where o.owner=t.owner''TYPICAL OUTLINE');
  3. Plan hash value: 772990711
  4. --------------------------------------------------------------------------------------------------------------------
  5. | Id  | Operation                  | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  6. --------------------------------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT           |          |    55M|    19G|    83  (23)| 00:00:01 |        |      |            |
  8. |   1 |  PX COORDINATOR            |          |       |       |            |          |        |      |            |
  9. |   2 |   PX SEND QC (RANDOM)      | :TQ10002 |    55M|    19G|    83  (23)| 00:00:01 |  Q1,02 | P->S | QC (RAND)  |
  10. |*  3 |    HASH JOIN BUFFERED      |          |    55M|    19G|    83  (23)| 00:00:01 |  Q1,02 | PCWP |            |
  11. |   4 |     PX RECEIVE             |          |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,02 | PCWP |            |
  12. |   5 |      PX SEND HYBRID HASH   | :TQ10000 |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,00 | P->P | HYBRID HASH|
  13. |   6 |       STATISTICS COLLECTOR |          |       |       |            |          |  Q1,00 | PCWC |            |
  14. |   7 |        PX BLOCK ITERATOR   |          |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  15. |   8 |         TABLE ACCESS FULL  | T_TAB    |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  16. |   9 |     PX RECEIVE             |          | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,02 | PCWP |            |
  17. |  10 |      PX SEND HYBRID HASH   | :TQ10001 | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,01 | P->P | HYBRID HASH|
  18. |  11 |       PX BLOCK ITERATOR    |          | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,01 | PCWC |            |
  19. |  12 |        TABLE ACCESS FULL   | T_OBJ    | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,01 | PCWP |            |
  20. --------------------------------------------------------------------------------------------------------------------
  21. Outline Data
  22. -------------
  23. /*+
  24. BEGIN_OUTLINE_DATA
  25. PQ_DISTRIBUTE(@"SEL$1" "O"@"SEL$1" HASH HASH)
  26. USE_HASH(@"SEL$1" "O"@"SEL$1")
  27. LEADING(@"SEL$1" "T"@"SEL$1" "O"@"SEL$1")
  28. FULL(@"SEL$1" "O"@"SEL$1")
  29. FULL(@"SEL$1" "T"@"SEL$1")
  30. OUTLINE_LEAF(@"SEL$1")
  31. ALL_ROWS
  32. OPT_PARAM('star_transformation_enabled' 'true')
  33. DB_VERSION('12.1.0.2')
  34. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  35. IGNORE_OPTIM_EMBEDDED_HINTS
  36. END_OUTLINE_DATA
  37. */
  38. Note
  39. -----
  40. - Degree of Parallelism is 8 because of hint

PX_FAULT_TOLERANCE
Syntax:PX_FAULT_TOLERANCE
Description: The PX_FAULT_TOLERANCE hint instructs the optimizer to enable fault-tolerance for parallel statement.

SQL??
  1. HelloDBA.com> @showpara  _parallel_fault_tolerance_enabled
  2. Inst Parameter                                                                               Parameter
  3. Id Name                                 Modifiable Description                             Value
  4. ---- ------------------------------------ ---------- --------------------------------------- ------------------------------
  5. 1 _parallel_fault_tolerance_enabled               enables or disables fault-tolerance for system: FALSE;
  6. parallel statement                     session: FALSE;
  7. HelloDBA.com> exec sql_explain('select /*+parallel(8) PX_FAULT_TOLERANCE*/* from t_obj o, t_tab t where o.owner=t.owner''TYPICAL OUTLINE');
  8. Plan hash value: 2603285128
  9. -----------------------------------------------------------------------------------------------------------------
  10. | Id  | Operation               | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  11. -----------------------------------------------------------------------------------------------------------------
  12. |   0 | SELECT STATEMENT        |          |    55M|    19G|    83  (23)| 00:00:01 |        |      |            |
  13. |   1 |  FAULT-TOLERANCE BUFFER |          |       |       |            |          |        |      |            |
  14. |   2 |   PX COORDINATOR        |          |       |       |            |          |        |      |            |
  15. |   3 |    PX SEND QC (RANDOM)  | :TQ10000 |    55M|    19G|    83  (23)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
  16. |*  4 |     HASH JOIN           |          |    55M|    19G|    83  (23)| 00:00:01 |  Q1,00 | PCWP |            |
  17. |   5 |      TABLE ACCESS FULL  | T_TAB    |  2426 |   613K|     4   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  18. |   6 |      PX BLOCK ITERATOR  |          | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,00 | PCWC |            |
  19. |   7 |       TABLE ACCESS FULL | T_OBJ    | 92299 |    10M|    60   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  20. -----------------------------------------------------------------------------------------------------------------
  21. Outline Data
  22. -------------
  23. /*+
  24. BEGIN_OUTLINE_DATA
  25. PQ_REPLICATE(@"SEL$1" "O"@"SEL$1")
  26. PQ_DISTRIBUTE(@"SEL$1" "O"@"SEL$1" BROADCAST NONE)
  27. USE_HASH(@"SEL$1" "O"@"SEL$1")
  28. LEADING(@"SEL$1" "T"@"SEL$1" "O"@"SEL$1")
  29. FULL(@"SEL$1" "O"@"SEL$1")
  30. FULL(@"SEL$1" "T"@"SEL$1")
  31. OUTLINE_LEAF(@"SEL$1")
  32. PX_FAULT_TOLERANCE
  33. ALL_ROWS
  34. OPT_PARAM('star_transformation_enabled' 'true')
  35. DB_VERSION('12.1.0.2')
  36. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  37. IGNORE_OPTIM_EMBEDDED_HINTS
  38. END_OUTLINE_DATA
  39. */

NO_PX_FAULT_TOLERANCE
Syntax:NO_PX_FAULT_TOLERANCE
Description: The NO_PX_FAULT_TOLERANCE hint instructs the optimizer to disable fault-tolerance for parallel statement.

SQL??
  1. HelloDBA.com> exec sql_explain('select /*+parallel(2) NO_PX_FAULT_TOLERANCE*/* from t_obj o, t_tab t where o.owner=t.owner''TYPICAL OUTLINE');
  2. Plan hash value: 1979616763
  3. ---------------------------------------------------------------------------------------------------------------
  4. | Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
  5. ---------------------------------------------------------------------------------------------------------------
  6. |   0 | SELECT STATEMENT      |          |    55M|    19G|   333  (24)| 00:00:01 |        |      |            |
  7. |   1 |  PX COORDINATOR       |          |       |       |            |          |        |      |            |
  8. |   2 |   PX SEND QC (RANDOM) | :TQ10000 |    55M|    19G|   333  (24)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
  9. |*  3 |    HASH JOIN          |          |    55M|    19G|   333  (24)| 00:00:01 |  Q1,00 | PCWP |            |
  10. |   4 |     TABLE ACCESS FULL | T_TAB    |  2426 |   613K|    16   (0)| 00:00:01 |  Q1,00 | PCWP |            |
  11. |   5 |     PX BLOCK ITERATOR |          | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | PCWC |            |
  12. |   6 |      TABLE ACCESS FULL| T_OBJ    | 92299 |    10M|   240   (1)| 00:00:01 |  Q1,00 | PCWP |            |
  13. ---------------------------------------------------------------------------------------------------------------
  14. Outline Data
  15. -------------
  16. /*+
  17. BEGIN_OUTLINE_DATA
  18. PQ_REPLICATE(@"SEL$1" "O"@"SEL$1")
  19. PQ_DISTRIBUTE(@"SEL$1" "O"@"SEL$1" BROADCAST NONE)
  20. USE_HASH(@"SEL$1" "O"@"SEL$1")
  21. LEADING(@"SEL$1" "T"@"SEL$1" "O"@"SEL$1")
  22. FULL(@"SEL$1" "O"@"SEL$1")
  23. FULL(@"SEL$1" "T"@"SEL$1")
  24. OUTLINE_LEAF(@"SEL$1")
  25. ALL_ROWS
  26. OPT_PARAM('star_transformation_enabled' 'true')
  27. DB_VERSION('12.1.0.2')
  28. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  29. IGNORE_OPTIM_EMBEDDED_HINTS
  30. END_OUTLINE_DATA
  31. */

ANSI_REARCH
Syntax:ANSI_REARCH ( [ @ queryblock ] )
Description: The ANSI_REARCH hint instructs the optimizer to re-architecture of ANSI left, right, and full outer joins.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_ansi_rearchitecture"=false;
  2. HelloDBA.com> exec sql_explain('select /*+ANSI_REARCH*/t.tablespace_name from t_obj o left outer join t_tab t on t.owner like :A and o.owner=t.owner''TYPICAL OUTLINE');
  3. Plan hash value: 220790772
  4. --------------------------------------------------------------------------------------------
  5. | Id  | Operation                     | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
  6. --------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT              |            |  2824K|    53M|    41  (18)| 00:00:01 |
  8. |*  1 |  HASH JOIN RIGHT OUTER        |            |  2824K|    53M|    41  (18)| 00:00:01 |
  9. |*  2 |   TABLE ACCESS FULL           | T_TAB      |   122 |  1708 |    29   (0)| 00:00:01 |
  10. |   3 |   BITMAP CONVERSION TO ROWIDS |            | 92299 |   540K|     5   (0)| 00:00:01 |
  11. |   4 |    BITMAP INDEX FAST FULL SCAN| T_OBJ_IDX1 |       |       |            |          |
  12. --------------------------------------------------------------------------------------------
  13. Outline Data
  14. -------------
  15. /*+
  16. BEGIN_OUTLINE_DATA
  17. SWAP_JOIN_INPUTS(@"SEL$2BFA4EE4" "T"@"SEL$1")
  18. USE_HASH(@"SEL$2BFA4EE4" "T"@"SEL$1")
  19. LEADING(@"SEL$2BFA4EE4" "O"@"SEL$1" "T"@"SEL$1")
  20. FULL(@"SEL$2BFA4EE4" "T"@"SEL$1")
  21. INDEX_FFS(@"SEL$2BFA4EE4" "O"@"SEL$1" ("T_OBJ"."OWNER"))
  22. OUTLINE(@"SEL$1")
  23. OUTLINE(@"SEL$2")
  24. ANSI_REARCH(@"SEL$1")
  25. OUTLINE(@"SEL$8812AA4E")
  26. ANSI_REARCH(@"SEL$2")
  27. OUTLINE(@"SEL$948754D7")
  28. MERGE(@"SEL$8812AA4E")
  29. OUTLINE_LEAF(@"SEL$2BFA4EE4")
  30. ALL_ROWS
  31. OPT_PARAM('star_transformation_enabled' 'true')
  32. OPT_PARAM('_optimizer_ansi_rearchitecture' 'false')
  33. DB_VERSION('12.1.0.2')
  34. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  35. IGNORE_OPTIM_EMBEDDED_HINTS
  36. END_OUTLINE_DATA
  37. */

NO_ANSI_REARCH
Syntax:NO_ANSI_REARCH ( [ @ queryblock ] )
Description: The NO_ANSI_REARCH hint instructs the optimizer not to re-architecture of ANSI left, right, and full outer joins.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_ansi_rearchitecture"=true;
  2. HelloDBA.com> exec sql_explain('select /*+NO_ANSI_REARCH*/t.tablespace_name from t_obj o left outer join t_tab t on t.owner like :A and o.owner=t.owner''TYPICAL OUTLINE');
  3. Plan hash value: 220790772
  4. --------------------------------------------------------------------------------------------
  5. | Id  | Operation                     | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
  6. --------------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT              |            |  2824K|    53M|    41  (18)| 00:00:01 |
  8. |*  1 |  HASH JOIN RIGHT OUTER        |            |  2824K|    53M|    41  (18)| 00:00:01 |
  9. |*  2 |   TABLE ACCESS FULL           | T_TAB      |   122 |  1708 |    29   (0)| 00:00:01 |
  10. |   3 |   BITMAP CONVERSION TO ROWIDS |            | 92299 |   540K|     5   (0)| 00:00:01 |
  11. |   4 |    BITMAP INDEX FAST FULL SCAN| T_OBJ_IDX1 |       |       |            |          |
  12. --------------------------------------------------------------------------------------------
  13. Outline Data
  14. -------------
  15. /*+
  16. BEGIN_OUTLINE_DATA
  17. SWAP_JOIN_INPUTS(@"SEL$9E43CB6E" "T"@"SEL$1")
  18. USE_HASH(@"SEL$9E43CB6E" "T"@"SEL$1")
  19. LEADING(@"SEL$9E43CB6E" "O"@"SEL$2" "T"@"SEL$1")
  20. FULL(@"SEL$9E43CB6E" "T"@"SEL$1")
  21. INDEX_FFS(@"SEL$9E43CB6E" "O"@"SEL$2" ("T_OBJ"."OWNER"))
  22. OUTLINE(@"SEL$1")
  23. OUTLINE(@"SEL$2")
  24. MERGE(@"SEL$1")
  25. OUTLINE(@"SEL$58A6D7F6")
  26. OUTLINE(@"SEL$3")
  27. MERGE(@"SEL$58A6D7F6")
  28. OUTLINE_LEAF(@"SEL$9E43CB6E")
  29. ALL_ROWS
  30. OPT_PARAM('star_transformation_enabled' 'true')
  31. DB_VERSION('12.1.0.2')
  32. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  33. IGNORE_OPTIM_EMBEDDED_HINTS
  34. END_OUTLINE_DATA
  35. */

ELIM_GROUPBY
Syntax:ELIM_GROUPBY ( [ @ queryblock ] )
Description: The ELIM_GROUPBY hint instructs the optimizer to do query transformation to eliminate group-by and aggregation.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_aggr_groupby_elim"=false;
  2. HelloDBA.com> exec sql_explain('select /*+ELIM_GROUPBY*/owner, count(*) from (select owner, sum(num_rows) from t_tab group by owner) group by owner''TYPICAL OUTLINE');
  3. Plan hash value: 1150833919
  4. ------------------------------------------------------------------------------------
  5. | Id  | Operation             | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ------------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT      |            |    20 |   140 |     6  (17)| 00:00:01 |
  8. |   1 |  HASH GROUP BY        |            |    20 |   140 |     6  (17)| 00:00:01 |
  9. |   2 |   INDEX FAST FULL SCAN| T_TAB_IDX1 |  2426 | 16982 |     5   (0)| 00:00:01 |
  10. ------------------------------------------------------------------------------------
  11. Outline Data
  12. -------------
  13. /*+
  14. BEGIN_OUTLINE_DATA
  15. USE_HASH_AGGREGATION(@"SEL$D07AE25A")
  16. INDEX_FFS(@"SEL$D07AE25A" "T_TAB"@"SEL$2" ("T_TAB"."OWNER"
  17. "T_TAB"."TABLE_NAME"))
  18. OUTLINE(@"SEL$1")
  19. OUTLINE(@"SEL$2")
  20. ELIM_GROUPBY(@"SEL$1")
  21. OUTLINE(@"SEL$47952E7A")
  22. MERGE(@"SEL$2")
  23. OUTLINE_LEAF(@"SEL$D07AE25A")
  24. ALL_ROWS
  25. OPT_PARAM('star_transformation_enabled' 'true')
  26. OPT_PARAM('_optimizer_aggr_groupby_elim' 'false')
  27. DB_VERSION('12.1.0.2')
  28. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  29. IGNORE_OPTIM_EMBEDDED_HINTS
  30. END_OUTLINE_DATA
  31. */

NO_ELIM_GROUPBY
Syntax:NO_ELIM_GROUPBY ( [ @ queryblock ] )
Description: The NO_ELIM_GROUPBY hint instructs the optimizer not to do query transformation to eliminate group-by and aggregation.

SQL??
  1. HelloDBA.com> alter session set "_optimizer_aggr_groupby_elim"=true;
  2. HelloDBA.com> exec sql_explain('select /*+NO_ELIM_GROUPBY*/owner, count(*) from (select owner, sum(num_rows) from t_tab group by owner) group by owner''TYPICAL OUTLINE');
  3. Plan hash value: 4120618623
  4. ------------------------------------------------------------------------------
  5. | Id  | Operation            | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ------------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT     |       |    20 |   140 |    30   (4)| 00:00:01 |
  8. |   1 |  HASH GROUP BY       |       |    20 |   140 |    30   (4)| 00:00:01 |
  9. |   2 |   VIEW               |       |    20 |   140 |    30   (4)| 00:00:01 |
  10. |   3 |    HASH GROUP BY     |       |    20 |   200 |    30   (4)| 00:00:01 |
  11. |   4 |     TABLE ACCESS FULL| T_TAB |  2426 | 24260 |    29   (0)| 00:00:01 |
  12. ------------------------------------------------------------------------------
  13. Outline Data
  14. -------------
  15. /*+
  16. BEGIN_OUTLINE_DATA
  17. USE_HASH_AGGREGATION(@"SEL$2")
  18. FULL(@"SEL$2" "T_TAB"@"SEL$2")
  19. USE_HASH_AGGREGATION(@"SEL$1")
  20. NO_ACCESS(@"SEL$1" "from$_subquery$_001"@"SEL$1")
  21. OUTLINE_LEAF(@"SEL$1")
  22. OUTLINE_LEAF(@"SEL$2")
  23. ALL_ROWS
  24. OPT_PARAM('star_transformation_enabled' 'true')
  25. DB_VERSION('12.1.0.2')
  26. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  27. IGNORE_OPTIM_EMBEDDED_HINTS
  28. END_OUTLINE_DATA
  29. */

INMEMORY
Syntax:INMEMORY ( [ @ queryblock ] tablespec ) 
Description: The INMEMORY hint enables in-memory queries.

SQL??
  1. HelloDBA.com> alter table t_obj1 inmemory;
  2. HelloDBA.com> alter session set "inmemory_query"=disable;
  3. HelloDBA.com> exec sql_explain('select /*+INMEMORY(o)*/* from t_obj1 o''TYPICAL OUTLINE');
  4. Plan hash value: 1936150373
  5. -------------------------------------------------------------------------------------
  6. | Id  | Operation                  | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
  7. -------------------------------------------------------------------------------------
  8. |   0 | SELECT STATEMENT           |        | 92299 |    10M|    21  (24)| 00:00:01 |
  9. |   1 |  TABLE ACCESS INMEMORY FULL| T_OBJ1 | 92299 |    10M|    21  (24)| 00:00:01 |
  10. -------------------------------------------------------------------------------------
  11. Outline Data
  12. -------------
  13. /*+
  14. BEGIN_OUTLINE_DATA
  15. FULL(@"SEL$1" "O"@"SEL$1")
  16. OUTLINE_LEAF(@"SEL$1")
  17. ALL_ROWS
  18. OPT_PARAM('star_transformation_enabled' 'true')
  19. DB_VERSION('12.1.0.2')
  20. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  21. IGNORE_OPTIM_EMBEDDED_HINTS
  22. END_OUTLINE_DATA
  23. */

NO_INMEMORY
Syntax:NO_INMEMORY ( [ @ queryblock ] tablespec ) 
Description: The NO_INMEMORY hint disables in-memory queries.

SQL??
  1. HelloDBA.com> alter session set "inmemory_query"=enable;
  2. HelloDBA.com> exec sql_explain('select /*+NO_INMEMORY(o)*/* from t_obj1 o''TYPICAL OUTLINE');
  3. Plan hash value: 1936150373
  4. ----------------------------------------------------------------------------
  5. | Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
  6. ----------------------------------------------------------------------------
  7. |   0 | SELECT STATEMENT  |        | 92299 |    10M|   431   (1)| 00:00:01 |
  8. |   1 |  TABLE ACCESS FULL| T_OBJ1 | 92299 |    10M|   431   (1)| 00:00:01 |
  9. ----------------------------------------------------------------------------
  10. Outline Data
  11. -------------
  12. /*+
  13. BEGIN_OUTLINE_DATA
  14. FULL(@"SEL$1" "O"@"SEL$1")
  15. OUTLINE_LEAF(@"SEL$1")
  16. ALL_ROWS
  17. OPT_PARAM('star_transformation_enabled' 'true')
  18. DB_VERSION('12.1.0.2')
  19. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  20. IGNORE_OPTIM_EMBEDDED_HINTS
  21. END_OUTLINE_DATA
  22. */

INMEMORY_PRUNING
Syntax:INMEMORY_PRUNING ( [ @ queryblock ] tablespec ) 
Description: The INMEMORY_PRUNING hint enables pruning of in-memory queries.

SQL??
  1. HelloDBA.com> alter table t_obj1 inmemory priority critical;
  2. HelloDBA.com> select * from t_obj1;
  3. HelloDBA.com> alter session set "_inmemory_pruning"=off;
  4. HelloDBA.com> select name,value, sysdate cap_time from v$statname n, v$mystat s where name = 'IM scan CUs pruned' and n.statistic#=s.statistic#;
  5. NAME                                                                  VALUE CAP_TIME
  6. ---------------------------------------------------------------- ---------- -------------------
  7. IM scan CUs pruned                                                        0 2014-10-03 15:06:19
  8. HelloDBA.com> select /*+INMEMORY_PRUNING(o)*/owner from t_obj1 o where object_id = 1;
  9. HelloDBA.com> select name,value, sysdate cap_time from v$statname n, v$mystat s where name = 'IM scan CUs pruned' and n.statistic#=s.statistic#;
  10. NAME                                                                  VALUE CAP_TIME
  11. ---------------------------------------------------------------- ---------- -------------------
  12. IM scan CUs pruned                                                        1 2014-10-03 15:06:37

NO_INMEMORY_PRUNING
Syntax:NO_INMEMORY_PRUNING ( [ @ queryblock ] tablespec ) 
Description: The NO_INMEMORY_PRUNING hint disables pruning of in-memory queries.

SQL??
  1. HelloDBA.com> alter session set "_inmemory_pruning"=on;
  2. HelloDBA.com> select name,value, sysdate cap_time from v$statname n, v$mystat s where name = 'IM scan CUs pruned' and n.statistic#=s.statistic#;
  3. NAME                                                                  VALUE CAP_TIME
  4. ---------------------------------------------------------------- ---------- -------------------
  5. IM scan CUs pruned                                                        1 2014-10-03 15:06:37
  6. HelloDBA.com> select /*+NO_INMEMORY_PRUNING(o)*/owner from t_obj1 o where object_id = 1;
  7. HelloDBA.com> select name,value, sysdate cap_time from v$statname n, v$mystat s where name = 'IM scan CUs pruned' and n.statistic#=s.statistic#;
  8. NAME                                                                  VALUE CAP_TIME
  9. ---------------------------------------------------------------- ---------- -------------------
  10. IM scan CUs pruned                                                        1 2014-10-03 15:06:54

USE_VECTOR_AGGREGATION
Syntax:USE_VECTOR_AGGREGATION ( [ @ queryblock ] tablespec ) 
Description: The USE_VECTOR_AGGREGATION hint enables group-by and aggregation using vector scheme.

SQL??
  1. HelloDBA.com> alter session set "_vector_aggregation_max_size"=8192;
  2. HelloDBA.com> exec dbms_stats.gather_table_stats(user,'T_FACT', method_opt => 'for all columns size 1');
  3. HelloDBA.com> exec dbms_stats.gather_table_stats(user,'CATEGORY_DIM', method_opt => 'for all columns size 1');
  4. HelloDBA.com> exec dbms_stats.gather_table_stats(user,'DATE_DIM', method_opt => 'for all columns size 1');
  5. HelloDBA.com> exec dbms_stats.gather_table_stats(user,'USER_DIM', method_opt => 'for all columns size 1');
  6. HelloDBA.com> alter session set "_gby_vector_aggregation_enabled"=false;
  7. HelloDBA.com> alter session set "_optimizer_vector_transformation"=false;
  8. HelloDBA.com> alter session set "_always_vector_transformation"=false;
  9. HelloDBA.com> exec sql_explain('select /*+VECTOR_TRANSFORM(@"SEL$1" FACT("F"@"SEL$1") DIMENSION("D"@"SEL$1") DIMENSION("U"@"SEL$1"))*/d.MONTH, u.CITY, max(f.SCORE) from T_FACT f, DATE_DIM d, USER_DIM u where f.COMPLETED_DATE_KEY=d.key and d.MONTH=:2 and f.MANAGER_KEY=u.key and u.IS_MANAGER=:1 group by d.MONTH, u.CITY''TYPICAL OUTLINE');
  10. Plan hash value: 100339589
  11. -----------------------------------------------------------------------------------------------------------------------
  12. | Id  | Operation                         | Name                      | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
  13. -----------------------------------------------------------------------------------------------------------------------
  14. |   0 | SELECT STATEMENT                  |                           |  6944 |   637K|       |  2471   (2)| 00:00:01 |
  15. |   1 |  TEMP TABLE TRANSFORMATION        |                           |       |       |       |            |          |
  16. |   2 |   LOAD AS SELECT                  | SYS_TEMP_0FD9D6672_C96885 |       |       |       |            |          |
  17. |   3 |    HASH GROUP BY                  |                           |     1 |    23 |       |    13  (16)| 00:00:01 |
  18. |   4 |     KEY VECTOR CREATE BUFFERED    | :KV0000                   |    22 |   506 |       |    13  (16)| 00:00:01 |
  19. |*  5 |      TABLE ACCESS INMEMORY FULL   | DATE_DIM                  |    22 |   418 |       |    11   (0)| 00:00:01 |
  20. |   6 |   LOAD AS SELECT                  | SYS_TEMP_0FD9D6673_C96885 |       |       |       |            |          |
  21. |   7 |    HASH GROUP BY                  |                           |  9819 |   230K|  6712K|  2440   (2)| 00:00:01 |
  22. |   8 |     KEY VECTOR CREATE BUFFERED    | :KV0001                   |   213K|  5006K|       |  2440   (2)| 00:00:01 |
  23. |*  9 |      TABLE ACCESS INMEMORY FULL   | USER_DIM                  |   213K|  4172K|       |  1138   (3)| 00:00:01 |
  24. |  10 |   HASH GROUP BY                   |                           |  6944 |   637K|       |    17  (12)| 00:00:01 |
  25. |* 11 |    HASH JOIN                      |                           |  6944 |   637K|       |    16   (7)| 00:00:01 |
  26. |  12 |     VIEW                          | VW_VT_AF278325            |  6944 |   318K|       |     4  (25)| 00:00:01 |
  27. |  13 |      HASH GROUP BY                |                           |  6944 |   135K|       |     4  (25)| 00:00:01 |
  28. |  14 |       KEY VECTOR USE              | :KV0001                   |  6944 |   135K|       |     4  (25)| 00:00:01 |
  29. |  15 |        KEY VECTOR USE             | :KV0000                   |  6944 |   108K|       |     4  (25)| 00:00:01 |
  30. |* 16 |         TABLE ACCESS INMEMORY FULL| T_FACT                    | 10000 |   117K|       |     3   (0)| 00:00:01 |
  31. |  17 |     MERGE JOIN CARTESIAN          |                           |  9819 |   450K|       |    12   (0)| 00:00:01 |
  32. |  18 |      TABLE ACCESS FULL            | SYS_TEMP_0FD9D6672_C96885 |     1 |    23 |       |     2   (0)| 00:00:01 |
  33. |  19 |      BUFFER SORT                  |                           |  9819 |   230K|       |    10   (0)| 00:00:01 |
  34. |  20 |       TABLE ACCESS FULL           | SYS_TEMP_0FD9D6673_C96885 |  9819 |   230K|       |    10   (0)| 00:00:01 |
  35. -----------------------------------------------------------------------------------------------------------------------
  36. Outline Data
  37. -------------
  38. /*+
  39. BEGIN_OUTLINE_DATA
  40. USE_HASH_AGGREGATION(@"SEL$0333970C")
  41. FULL(@"SEL$0333970C" "D"@"SEL$1")
  42. USE_HASH_AGGREGATION(@"SEL$D0E111EF")
  43. FULL(@"SEL$D0E111EF" "U"@"SEL$1")
  44. USE_HASH_AGGREGATION(@"SEL$709E21E9")
  45. FULL(@"SEL$709E21E9" "F"@"SEL$1")
  46. USE_HASH_AGGREGATION(@"SEL$A6BF8214")
  47. SWAP_JOIN_INPUTS(@"SEL$A6BF8214" "VW_VT_AF278325"@"SEL$AF278325")
  48. USE_HASH(@"SEL$A6BF8214" "VW_VT_AF278325"@"SEL$AF278325")
  49. USE_MERGE_CARTESIAN(@"SEL$A6BF8214" "TT_VT_5"@"SEL$0CAF0D26")
  50. LEADING(@"SEL$A6BF8214" "TT_VT_4"@"SEL$DED1BBE9" "TT_VT_5"@"SEL$0CAF0D26" "VW_VT_AF278325"@"SEL$AF278325")
  51. NO_ACCESS(@"SEL$A6BF8214" "VW_VT_AF278325"@"SEL$AF278325")
  52. FULL(@"SEL$A6BF8214" "TT_VT_5"@"SEL$0CAF0D26")
  53. FULL(@"SEL$A6BF8214" "TT_VT_4"@"SEL$DED1BBE9")
  54. OUTLINE(@"SEL$1")
  55. OUTLINE(@"SEL$AF278325")
  56. OUTLINE(@"SEL$6E7BB6AB")
  57. OUTLINE(@"SEL$3ACFCBE9")
  58. VECTOR_TRANSFORM(@"SEL$1" FACT("F"@"SEL$1") DIMENSION("D"@"SEL$1") DIMENSION("U"@"SEL$1"))
  59. OUTLINE_LEAF(@"SEL$A6BF8214")
  60. OUTLINE_LEAF(@"SEL$709E21E9")
  61. OUTLINE_LEAF(@"SEL$D0E111EF")
  62. OUTLINE_LEAF(@"SEL$0333970C")
  63. ALL_ROWS
  64. OPT_PARAM('star_transformation_enabled' 'true')
  65. OPT_PARAM('_gby_vector_aggregation_enabled' 'false')
  66. DB_VERSION('12.1.0.2')
  67. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  68. IGNORE_OPTIM_EMBEDDED_HINTS
  69. END_OUTLINE_DATA
  70. */

NO_USE_VECTOR_AGGREGATION
Syntax:NO_USE_VECTOR_AGGREGATION ( [ @ queryblock ] tablespec ) 
Description: The NO_USE_VECTOR_AGGREGATION hint disnables group-by and aggregation using vector scheme.

SQL??
  1. HelloDBA.com> alter session set "_gby_vector_aggregation_enabled"=true;
  2. HelloDBA.com> alter session set "_optimizer_vector_transformation"=true;
  3. HelloDBA.com> alter session set "_always_vector_transformation"=true;
  4. HelloDBA.com> exec sql_explain('select /*+NO_VECTOR_TRANSFORM*/d.MONTH, u.CITY, max(f.SCORE) from T_FACT f, DATE_DIM d, USER_DIM u where f.COMPLETED_DATE_KEY=d.key and d.MONTH=:2 and f.MANAGER_KEY=u.key and u.IS_MANAGER=:1 group by d.MONTH, u.CITY''TYPICAL OUTLINE');
  5. Plan hash value: 397045964
  6. --------------------------------------------------------------------------------------------
  7. | Id  | Operation                       | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
  8. --------------------------------------------------------------------------------------------
  9. |   0 | SELECT STATEMENT                |          |     1 |    51 |  1153   (3)| 00:00:01 |
  10. |   1 |  HASH GROUP BY                  |          |     1 |    51 |  1153   (3)| 00:00:01 |
  11. |*  2 |   HASH JOIN                     |          |   425 | 21675 |  1152   (3)| 00:00:01 |
  12. |   3 |    JOIN FILTER CREATE           | :BF0000  |   424 | 13144 |    14   (0)| 00:00:01 |
  13. |*  4 |     HASH JOIN                   |          |   424 | 13144 |    14   (0)| 00:00:01 |
  14. |   5 |      JOIN FILTER CREATE         | :BF0001  |    22 |   418 |    11   (0)| 00:00:01 |
  15. |*  6 |       TABLE ACCESS INMEMORY FULL| DATE_DIM |    22 |   418 |    11   (0)| 00:00:01 |
  16. |   7 |      JOIN FILTER USE            | :BF0001  | 10000 |   117K|     3   (0)| 00:00:01 |
  17. |*  8 |       TABLE ACCESS INMEMORY FULL| T_FACT   | 10000 |   117K|     3   (0)| 00:00:01 |
  18. |   9 |    JOIN FILTER USE              | :BF0000  |   213K|  4172K|  1138   (3)| 00:00:01 |
  19. |* 10 |     TABLE ACCESS INMEMORY FULL  | USER_DIM |   213K|  4172K|  1138   (3)| 00:00:01 |
  20. --------------------------------------------------------------------------------------------
  21. Outline Data
  22. -------------
  23. /*+
  24. BEGIN_OUTLINE_DATA
  25. USE_HASH_AGGREGATION(@"SEL$1")
  26. PX_JOIN_FILTER(@"SEL$1" "U"@"SEL$1")
  27. PX_JOIN_FILTER(@"SEL$1" "F"@"SEL$1")
  28. USE_HASH(@"SEL$1" "U"@"SEL$1")
  29. USE_HASH(@"SEL$1" "F"@"SEL$1")
  30. LEADING(@"SEL$1" "D"@"SEL$1" "F"@"SEL$1" "U"@"SEL$1")
  31. FULL(@"SEL$1" "U"@"SEL$1")
  32. FULL(@"SEL$1" "F"@"SEL$1")
  33. FULL(@"SEL$1" "D"@"SEL$1")
  34. OUTLINE_LEAF(@"SEL$1")
  35. ALL_ROWS
  36. OPT_PARAM('star_transformation_enabled' 'true')
  37. DB_VERSION('12.1.0.2')
  38. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  39. IGNORE_OPTIM_EMBEDDED_HINTS
  40. END_OUTLINE_DATA
  41. */

VECTOR_TRANSFORM 
Syntax:VECTOR_TRANSFORM ( [ @ queryblock ] [ FACT([ @ queryblock ] tablespec) ] [ DIMENSION([ @ queryblock ] tablespec) ... ] ) 
Description: VECTOR_TRANSFORM enables the vector transformation on the specified query block, regardless of costing.
Refer to the example of USE_VECTOR_AGGREGATION

NO_VECTOR_TRANSFORM
Syntax:NO_VECTOR_TRANSFORM ( [ @ queryblock ] ) 
Description: NO_VECTOR_TRANSFORM disables the vector transformation from engaging on the specified query block.
Refer to the example of NO_USE_VECTOR_AGGREGATION

VECTOR_TRANSFORM_FACT
Syntax:VECTOR_TRANSFORM_FACT ( [ @ queryblock ] tablespec ) 
Description: VECTOR_TRANSFORM_FACT includes the specified FROM expressions in the fact table generated by the vector transformation.

SQL??
  1. HelloDBA.com> alter session set "_gby_vector_aggregation_enabled"=false;
  2. HelloDBA.com> alter session set "_optimizer_vector_transformation"=false;
  3. HelloDBA.com> alter session set "_always_vector_transformation"=false;
  4. HelloDBA.com> exec sql_explain('select /*+VECTOR_TRANSFORM VECTOR_TRANSFORM_FACT(F) VECTOR_TRANSFORM_DIMS(U) VECTOR_TRANSFORM_DIMS(D)*/d.MONTH, u.CITY, max(f.SCORE) from T_FACT f, DATE_DIM d, USER_DIM u where f.COMPLETED_DATE_KEY=d.key and d.MONTH=:2 and f.MANAGER_KEY=u.key and u.IS_MANAGER=:1 group by d.MONTH, u.CITY''TYPICAL OUTLINE');
  5. Plan hash value: 100339589
  6. -------------------------------------------------------------------------------------------------------------------
  7. | Id  | Operation                     | Name                      | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
  8. -------------------------------------------------------------------------------------------------------------------
  9. |   0 | SELECT STATEMENT              |                           |  6944 |   637K|       | 31857   (1)| 00:00:02 |
  10. |   1 |  TEMP TABLE TRANSFORMATION    |                           |       |       |       |            |          |
  11. |   2 |   LOAD AS SELECT              | SYS_TEMP_0FD9D6684_C96885 |       |       |       |            |          |
  12. |   3 |    HASH GROUP BY              |                           |     1 |    23 |       |   289   (1)| 00:00:01 |
  13. |   4 |     KEY VECTOR CREATE BUFFERED| :KV0000                   |    22 |   506 |       |   289   (1)| 00:00:01 |
  14. |*  5 |      TABLE ACCESS FULL        | DATE_DIM                  |    22 |   418 |       |   287   (0)| 00:00:01 |
  15. |   6 |   LOAD AS SELECT              | SYS_TEMP_0FD9D6685_C96885 |       |       |       |            |          |
  16. |   7 |    HASH GROUP BY              |                           |  9819 |   230K|  6712K| 31492   (1)| 00:00:02 |
  17. |   8 |     KEY VECTOR CREATE BUFFERED| :KV0001                   |   213K|  5006K|       | 31492   (1)| 00:00:02 |
  18. |*  9 |      TABLE ACCESS FULL        | USER_DIM                  |   213K|  4172K|       | 30189   (1)| 00:00:02 |
  19. |  10 |   HASH GROUP BY               |                           |  6944 |   637K|       |    76   (4)| 00:00:01 |
  20. |* 11 |    HASH JOIN                  |                           |  6944 |   637K|       |    74   (2)| 00:00:01 |
  21. |  12 |     VIEW                      | VW_VT_AF278325            |  6944 |   318K|       |    62   (2)| 00:00:01 |
  22. |  13 |      HASH GROUP BY            |                           |  6944 |   135K|       |    62   (2)| 00:00:01 |
  23. |  14 |       KEY VECTOR USE          | :KV0001                   |  6944 |   135K|       |    62   (2)| 00:00:01 |
  24. |  15 |        KEY VECTOR USE         | :KV0000                   |  6944 |   108K|       |    62   (2)| 00:00:01 |
  25. |* 16 |         TABLE ACCESS FULL     | T_FACT                    | 10000 |   117K|       |    61   (0)| 00:00:01 |
  26. |  17 |     MERGE JOIN CARTESIAN      |                           |  9819 |   450K|       |    12   (0)| 00:00:01 |
  27. |  18 |      TABLE ACCESS FULL        | SYS_TEMP_0FD9D6684_C96885 |     1 |    23 |       |     2   (0)| 00:00:01 |
  28. |  19 |      BUFFER SORT              |                           |  9819 |   230K|       |    10   (0)| 00:00:01 |
  29. |  20 |       TABLE ACCESS FULL       | SYS_TEMP_0FD9D6685_C96885 |  9819 |   230K|       |    10   (0)| 00:00:01 |
  30. -------------------------------------------------------------------------------------------------------------------
  31. Outline Data
  32. -------------
  33. /*+
  34. BEGIN_OUTLINE_DATA
  35. USE_HASH_AGGREGATION(@"SEL$0333970C")
  36. FULL(@"SEL$0333970C" "D"@"SEL$1")
  37. USE_HASH_AGGREGATION(@"SEL$D0E111EF")
  38. FULL(@"SEL$D0E111EF" "U"@"SEL$1")
  39. USE_HASH_AGGREGATION(@"SEL$709E21E9")
  40. FULL(@"SEL$709E21E9" "F"@"SEL$1")
  41. USE_HASH_AGGREGATION(@"SEL$A6BF8214")
  42. SWAP_JOIN_INPUTS(@"SEL$A6BF8214" "VW_VT_AF278325"@"SEL$AF278325")
  43. USE_HASH(@"SEL$A6BF8214" "VW_VT_AF278325"@"SEL$AF278325")
  44. USE_MERGE_CARTESIAN(@"SEL$A6BF8214" "TT_VT_5"@"SEL$0CAF0D26")
  45. LEADING(@"SEL$A6BF8214" "TT_VT_4"@"SEL$DED1BBE9" "TT_VT_5"@"SEL$0CAF0D26" "VW_VT_AF278325"@"SEL$AF278325")
  46. NO_ACCESS(@"SEL$A6BF8214" "VW_VT_AF278325"@"SEL$AF278325")
  47. FULL(@"SEL$A6BF8214" "TT_VT_5"@"SEL$0CAF0D26")
  48. FULL(@"SEL$A6BF8214" "TT_VT_4"@"SEL$DED1BBE9")
  49. OUTLINE(@"SEL$1")
  50. OUTLINE(@"SEL$AF278325")
  51. OUTLINE(@"SEL$6E7BB6AB")
  52. OUTLINE(@"SEL$3ACFCBE9")
  53. VECTOR_TRANSFORM(@"SEL$1" FACT("F"@"SEL$1") DIMENSION("D"@"SEL$1") DIMENSION("U"@"SEL$1"))
  54. OUTLINE_LEAF(@"SEL$A6BF8214")
  55. OUTLINE_LEAF(@"SEL$709E21E9")
  56. OUTLINE_LEAF(@"SEL$D0E111EF")
  57. OUTLINE_LEAF(@"SEL$0333970C")
  58. ALL_ROWS
  59. OPT_PARAM('star_transformation_enabled' 'true')
  60. OPT_PARAM('_optimizer_vector_transformation' 'false')
  61. OPT_PARAM('_gby_vector_aggregation_enabled' 'false')
  62. DB_VERSION('12.1.0.2')
  63. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  64. IGNORE_OPTIM_EMBEDDED_HINTS
  65. END_OUTLINE_DATA
  66. */

NO_VECTOR_TRANSFORM_FACT
Syntax:NO_VECTOR_TRANSFORM_FACT ( [ @ queryblock ] tablespec ) 
Description: NO_VECTOR_TRANSFORM_FACT excludes the specified FROM expressions from the fact table generated by the vector transformation.

SQL??
  1. HelloDBA.com> alter session set "_gby_vector_aggregation_enabled"=true;
  2. HelloDBA.com> alter session set "_optimizer_vector_transformation"=true;
  3. HelloDBA.com> alter session set "_always_vector_transformation"=true;
  4. HelloDBA.com> exec sql_explain('select /*+ NO_VECTOR_TRANSFORM_FACT(F) */d.MONTH, u.CITY, max(f.SCORE) from T_FACT f, DATE_DIM d, USER_DIM u where f.COMPLETED_DATE_KEY=d.key and d.MONTH=:2 and f.MANAGER_KEY=u.key and u.IS_MANAGER=:1 group by d.MONTH, u.CITY''TYPICAL OUTLINE');
  5. Plan hash value: 762306316
  6. ---------------------------------------------------------------------------------
  7. | Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
  8. ---------------------------------------------------------------------------------
  9. |   0 | SELECT STATEMENT     |          |     1 |    51 | 30540   (1)| 00:00:02 |
  10. |   1 |  HASH GROUP BY       |          |     1 |    51 | 30540   (1)| 00:00:02 |
  11. |*  2 |   HASH JOIN          |          |   425 | 21675 | 30539   (1)| 00:00:02 |
  12. |*  3 |    HASH JOIN         |          |   424 | 13144 |   349   (1)| 00:00:01 |
  13. |*  4 |     TABLE ACCESS FULL| DATE_DIM |    22 |   418 |   287   (0)| 00:00:01 |
  14. |   5 |     TABLE ACCESS FULL| T_FACT   | 10000 |   117K|    61   (0)| 00:00:01 |
  15. |*  6 |    TABLE ACCESS FULL | USER_DIM |   213K|  4172K| 30189   (1)| 00:00:02 |
  16. ---------------------------------------------------------------------------------
  17. Outline Data
  18. -------------
  19. /*+
  20. BEGIN_OUTLINE_DATA
  21. USE_HASH_AGGREGATION(@"SEL$1")
  22. USE_HASH(@"SEL$1" "U"@"SEL$1")
  23. USE_HASH(@"SEL$1" "F"@"SEL$1")
  24. LEADING(@"SEL$1" "D"@"SEL$1" "F"@"SEL$1" "U"@"SEL$1")
  25. FULL(@"SEL$1" "U"@"SEL$1")
  26. FULL(@"SEL$1" "F"@"SEL$1")
  27. FULL(@"SEL$1" "D"@"SEL$1")
  28. OUTLINE_LEAF(@"SEL$1")
  29. ALL_ROWS
  30. OPT_PARAM('star_transformation_enabled' 'true')
  31. DB_VERSION('12.1.0.2')
  32. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  33. IGNORE_OPTIM_EMBEDDED_HINTS
  34. END_OUTLINE_DATA
  35. */

VECTOR_TRANSFORM_DIMS
Syntax:VECTOR_TRANSFORM_DIMS ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: VECTOR_TRANSFORM_DIMS includes the specified FROM expressions in enabled dimensions generated by the vector transformation.
Refer to the example of VECTOR_TRANSFORM_FACT

NO_VECTOR_TRANSFORM_DIMS
Syntax:NO_VECTOR_TRANSFORM_DIMS ( [ @ queryblock ] tablespec [ tablespec ]... ) 
Description: NO_VECTOR_TRANSFORM_DIMS excludes the specified from expressions from enabled dimensions generated by the vector transformation.

SQL??
  1. HelloDBA.com> alter session set "_gby_vector_aggregation_enabled"=true;
  2. HelloDBA.com> alter session set "_optimizer_vector_transformation"=true;
  3. HelloDBA.com> alter session set "_always_vector_transformation"=true;
  4. HelloDBA.com> exec sql_explain('select /*+ NO_VECTOR_TRANSFORM_DIMS(U) NO_VECTOR_TRANSFORM_DIMS(D)*/d.MONTH, u.CITY, max(f.SCORE) from T_FACT f, DATE_DIM d, USER_DIM u where f.COMPLETED_DATE_KEY=d.key and d.MONTH=:2 and f.MANAGER_KEY=u.key and u.IS_MANAGER=:1 group by d.MONTH, u.CITY''TYPICAL OUTLINE');
  5. Plan hash value: 762306316
  6. ---------------------------------------------------------------------------------
  7. | Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
  8. ---------------------------------------------------------------------------------
  9. |   0 | SELECT STATEMENT     |          |     1 |    51 | 30540   (1)| 00:00:02 |
  10. |   1 |  HASH GROUP BY       |          |     1 |    51 | 30540   (1)| 00:00:02 |
  11. |*  2 |   HASH JOIN          |          |   425 | 21675 | 30539   (1)| 00:00:02 |
  12. |*  3 |    HASH JOIN         |          |   424 | 13144 |   349   (1)| 00:00:01 |
  13. |*  4 |     TABLE ACCESS FULL| DATE_DIM |    22 |   418 |   287   (0)| 00:00:01 |
  14. |   5 |     TABLE ACCESS FULL| T_FACT   | 10000 |   117K|    61   (0)| 00:00:01 |
  15. |*  6 |    TABLE ACCESS FULL | USER_DIM |   213K|  4172K| 30189   (1)| 00:00:02 |
  16. ---------------------------------------------------------------------------------
  17. Outline Data
  18. -------------
  19. /*+
  20. BEGIN_OUTLINE_DATA
  21. USE_HASH_AGGREGATION(@"SEL$1")
  22. USE_HASH(@"SEL$1" "U"@"SEL$1")
  23. USE_HASH(@"SEL$1" "F"@"SEL$1")
  24. LEADING(@"SEL$1" "D"@"SEL$1" "F"@"SEL$1" "U"@"SEL$1")
  25. FULL(@"SEL$1" "U"@"SEL$1")
  26. FULL(@"SEL$1" "F"@"SEL$1")
  27. FULL(@"SEL$1" "D"@"SEL$1")
  28. OUTLINE_LEAF(@"SEL$1")
  29. ALL_ROWS
  30. OPT_PARAM('star_transformation_enabled' 'true')
  31. DB_VERSION('12.1.0.2')
  32. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  33. IGNORE_OPTIM_EMBEDDED_HINTS
  34. END_OUTLINE_DATA
  35. */

WITH_PLSQL
Syntax:WITH_PLSQL
Description: WITH_PLSQL instructs the optimizer to allow the DML statement contain PLSQL block.

SQL??
  1. HelloDBA.com> update t_obj1 o
  2. set o.created=
  3. (with
  4. function f return date
  5. is
  6. begin
  7. return sysdate;
  8. end;
  9. select f from dual)
  10. where rownum <=10;
  11. /
  12. (with
  13. *
  14. ERROR at line 3:
  15. ORA-32034: unsupported use of WITH clause
  16. HelloDBA.com> update /*+WITH_PLSQL*/t_obj1 o
  17. set o.created=
  18. (with
  19. function f return date
  20. is
  21. begin
  22. return sysdate;
  23. end;
  24. select f from dual)
  25. where rownum <=10;
  26. /
  27. 10 records updated.

DATA_SECURITY_REWRITE_LIMIT
Syntax:DATA_SECURITY_REWRITE_LIMIT
Description: Enable XS Data Security Rewrite

NO_DATA_SECURITY_REWRITE
Syntax:NO_DATA_SECURITY_REWRITE
Description: Disable XS Data Security Rewrite

SQL??
  1. HelloDBA.com> conn demo/demo@plugdb1
  2. HelloDBA.com> create table t_obj2 as select * from t_obj;
  3. Table created.
  4. HelloDBA.com> conn sys/syspass@plugdb1 as sysdba
  5. HelloDBA.com> grant dba, xs_session_admin to demoadm identified by demoadm;
  6. HelloDBA.com> connect demoadm/demoadm@plugdb1
  7. HelloDBA.com> create role db_obj;
  8. HelloDBA.com> grant selectinsertupdatedelete on demo.t_obj2 to db_obj;
  9. HelloDBA.com> exec xs_principal.create_role(name => 'obj_role', enabled => true);
  10. HelloDBA.com> grant db_obj to obj_role;
  11. HelloDBA.com> exec  xs_principal.create_user(name => 'demoxs'schema => 'demo');
  12. HelloDBA.com> exec  sys.xs_principal.set_password('demoxs''demoxs');
  13. HelloDBA.com> exec  xs_principal.grant_roles('demoxs''obj_role');
  14. HelloDBA.com> declare
  15. begin
  16. xs_security_class.create_security_class(
  17. name        => 'demoprivs',
  18. parent_list => xs$name_list('sys.dml'),
  19. priv_list   => xs$privilege_list(xs$privilege('view_objname')));
  20. end;
  21. /
  22. HelloDBA.com> declare
  23. aces xs$ace_list := xs$ace_list();
  24. begin
  25. aces.extend(1);
  26. aces(1) := xs$ace_type(privilege_list => xs$name_list('select','view_objname'),
  27. principal_name => 'obj_role');
  28. xs_acl.create_acl(name      => 'obj_acl',
  29. ace_list  => aces,
  30. sec_class => 'demoprivs');
  31. end;
  32. /
  33. HelloDBA.com> declare
  34. realms   xs$realm_constraint_list := xs$realm_constraint_list();
  35. cols     xs$column_constraint_list := xs$column_constraint_list();
  36. begin
  37. realms.extend(1);
  38. realms(1) := xs$realm_constraint_type(
  39. realm    => 'owner = xs_sys_context(''xs$session'',''username'')',
  40. acl_list => xs$name_list('obj_acl'));
  41. cols.extend(1);
  42. cols(1) := xs$column_constraint_type(
  43. column_list => xs$list('OBJECT_NAME'),
  44. privilege   => 'view_objname');
  45. xs_data_security.create_policy(
  46. name                   => 'obj_ds',
  47. realm_constraint_list  => realms,
  48. column_constraint_list => cols);
  49. end;
  50. /
  51. HelloDBA.com> begin
  52. xs_data_security.apply_object_policy(
  53. policy => 'obj_ds',
  54. schema => 'demo',
  55. object =>'t_obj2');
  56. end;
  57. /
  58. HelloDBA.com> set serveroutput on;
  59. HelloDBA.com> begin
  60. if (xs_diag.validate_workspace()) then
  61. dbms_output.put_line('All configurations are correct.');
  62. else
  63. dbms_output.put_line('Some configurations are incorrect.');
  64. end if;
  65. end;
  66. /
  67. HelloDBA.com> select * from xs$validation_table order by 1, 2, 3, 4;
  68. HelloDBA.com> conn demo/demo@plugdb1
  69. HelloDBA.com> exec sql_explain('select /*+DATA_SECURITY_REWRITE_LIMIT*/* from t_obj2 t');
  70. Plan hash value: 3489627480
  71. -----------------------------------------------------------------------------
  72. | Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
  73. -----------------------------------------------------------------------------
  74. |   0 | SELECT STATEMENT   |        |     1 |   115 |     0   (0)|          |
  75. |*  1 |  FILTER            |        |       |       |            |          |
  76. |   2 |   FAST DUAL        |        |     1 |       |     2   (0)| 00:00:01 |
  77. |   3 |   FAST DUAL        |        |     1 |       |     2   (0)| 00:00:01 |
  78. |*  4 |  FILTER            |        |       |       |            |          |
  79. |   5 |   TABLE ACCESS FULL| T_OBJ2 | 92299 |    10M|   431   (1)| 00:00:01 |
  80. -----------------------------------------------------------------------------
  81. Query Block Name / Object Alias (identified by operation id):
  82. -------------------------------------------------------------
  83. 1 - SEL$5
  84. 2 - SEL$5        / DUAL@SEL$5
  85. 3 - SEL$6        / DUAL@SEL$6
  86. 4 - SEL$88122447
  87. 5 - SEL$88122447 / T_OBJ2@SEL$4
  88. Outline Data
  89. -------------
  90. /*+
  91. BEGIN_OUTLINE_DATA
  92. FULL(@"SEL$88122447" "T_OBJ2"@"SEL$4")
  93. OUTLINE(@"SEL$4")
  94. OUTLINE(@"SEL$3")
  95. MERGE(@"SEL$4")
  96. OUTLINE(@"SEL$07BDC5B4")
  97. OUTLINE(@"SEL$2")
  98. MERGE(@"SEL$07BDC5B4")
  99. OUTLINE(@"SEL$641071AC")
  100. OUTLINE(@"SEL$1")
  101. MERGE(@"SEL$641071AC")
  102. OUTLINE_LEAF(@"SEL$88122447")
  103. OUTLINE_LEAF(@"SEL$6")
  104. OUTLINE_LEAF(@"SEL$5")
  105. ALL_ROWS
  106. OPT_PARAM('star_transformation_enabled' 'true')
  107. DB_VERSION('12.1.0.2')
  108. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  109. IGNORE_OPTIM_EMBEDDED_HINTS
  110. END_OUTLINE_DATA
  111. */
  112. Predicate Information (identified by operation id):
  113. ---------------------------------------------------
  114. 1 - filter(XS_SYS_CONTEXT('xs$session','username')=:B1 AND
  115. SYS_FILTER_ACLS(HEXTORAW('0000000080002789'),2147493768) IS NOT NULL)
  116. 4 - filter(NULL IS NOT NULL)
  117. HelloDBA.com> exec sql_explain('select /*+NO_DATA_SECURITY_REWRITE*/* from t_obj2 t');
  118. Plan hash value: 3789235527
  119. -----------------------------------------------------------------------------
  120. | Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
  121. -----------------------------------------------------------------------------
  122. |   0 | SELECT STATEMENT   |        |   923 |   103K|   538   (1)| 00:00:01 |
  123. |*  1 |  FILTER            |        |       |       |            |          |
  124. |   2 |   FAST DUAL        |        |     1 |       |     2   (0)| 00:00:01 |
  125. |   3 |   FAST DUAL        |        |     1 |       |     2   (0)| 00:00:01 |
  126. |*  4 |  FILTER            |        |       |       |            |          |
  127. |   5 |   TABLE ACCESS FULL| T_OBJ2 | 92299 |    10M|   432   (1)| 00:00:01 |
  128. |*  6 |   FILTER           |        |       |       |            |          |
  129. |   7 |    FAST DUAL       |        |     1 |       |     2   (0)| 00:00:01 |
  130. -----------------------------------------------------------------------------
  131. Query Block Name / Object Alias (identified by operation id):
  132. -------------------------------------------------------------
  133. 1 - SEL$5
  134. 2 - SEL$5        / DUAL@SEL$5
  135. 3 - SEL$6        / DUAL@SEL$6
  136. 4 - SEL$88122447
  137. 5 - SEL$88122447 / T_OBJ2@SEL$4
  138. 6 - SEL$7
  139. 7 - SEL$7        / DUAL@SEL$7
  140. Outline Data
  141. -------------
  142. /*+
  143. BEGIN_OUTLINE_DATA
  144. PQ_FILTER(@"SEL$88122447" SERIAL)
  145. FULL(@"SEL$88122447" "T_OBJ2"@"SEL$4")
  146. OUTLINE(@"SEL$4")
  147. OUTLINE(@"SEL$3")
  148. MERGE(@"SEL$4")
  149. OUTLINE(@"SEL$07BDC5B4")
  150. OUTLINE(@"SEL$2")
  151. MERGE(@"SEL$07BDC5B4")
  152. OUTLINE(@"SEL$641071AC")
  153. OUTLINE(@"SEL$1")
  154. MERGE(@"SEL$641071AC")
  155. OUTLINE_LEAF(@"SEL$88122447")
  156. OUTLINE_LEAF(@"SEL$7")
  157. OUTLINE_LEAF(@"SEL$6")
  158. OUTLINE_LEAF(@"SEL$5")
  159. ALL_ROWS
  160. OPT_PARAM('star_transformation_enabled' 'true')
  161. DB_VERSION('12.1.0.2')
  162. OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
  163. IGNORE_OPTIM_EMBEDDED_HINTS
  164. END_OUTLINE_DATA
  165. */
  166. Predicate Information (identified by operation id):
  167. ---------------------------------------------------
  168. 1 - filter(XS_SYS_CONTEXT('xs$session','username')=:B1 AND
  169. SYS_FILTER_ACLS(HEXTORAW('0000000080002789'),2147493768) IS NOT NULL)
  170. 4 - filter(SYS_CHECK_PRIVILEGE(HEXTORAW('0000000080000001'),NULL,NULL
  171. ,2147493769, (SELECT 1 FROM "SYS"."DUAL" "DUAL" WHERE
  172. XS_SYS_CONTEXT('xs$session','username')=:B1))=1)
  173. 6 - filter(XS_SYS_CONTEXT('xs$session','username')=:B1)

USE_HIDDEN_PARTITIONS
Syntax:USE_HIDDEN_PARTITIONS
Description: USE_HIDDEN_PARTITIONS enables using hidden partitions.

BITMAP_AND
Syntax:BITMAP_AND
Description: Bitmap tree access path



About Me

...............................................................................................................................

● 本文转载自网络:http://www.hellodba.com/reader.php?ID=220&lang=CN

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2017-05-09 09:00 ~ 2017-05-30 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

...............................................................................................................................

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。

ico_mailme_02.png DBA笔试面试讲解 欢迎与我联系

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

Oracle 12c 新SQL提示(hint)相关推荐

  1. Oracle 12c 新参数 PGA_AGGREGATE_LIMIT 限制 PGA 内存总大小

    Oracle 12c 新参数 PGA_AGGREGATE_LIMIT 限制 PGA 内存总大小 在自动 PGA 内存管理模式下, Oracle DB 尝试通过动态控制分配给工作区的 PGA 内存量遵从 ...

  2. oracle 12c sql图形化,Oracle 12c PL/SQL程序设计终极指南

    Oracle 12c PL/SQL程序设计终极指南 作者:孙风栋;王澜;郭晓惠 出版日期:2015年06月 文件大小:11.73M 支持设备: ¥60.00在线试读 适用客户端: 言商书局 iPad/ ...

  3. Oracle 12C 新特性之扩展数据类型(extended data type)

    Oracle 12C 新特性-扩展数据类型,在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节.只要可能,扩展字 ...

  4. Oracle 12c新特性-多租户的维护管理

    云和恩墨技术专家 现就职于云和恩墨,为某省电信公司数据库运维服务:在IT行业拥有10年以上的工作经历.擅长 ORACLE 数据库运维管理.shell 脚本开发:长期服务于电信.金融,政府行业:具有丰富 ...

  5. 【云和恩墨大讲堂】高凯 | Oracle 12c 新特性-多租户的维护管理

    "云和恩墨大讲堂" 线上课程周四晚继续开讲.本期我们邀请的嘉宾是云和恩墨西北区技术专家 - 高凯,在这里跟大家分享一下 Oracle 12c 新特性方面的主题.课程以图文形式在微信 ...

  6. Oracle 12c新特性--LREG进程专门负责注册实例服务

    Oracle 12c引入了一些大量的新特性,数据库隐藏参数12.2比11.2就多了2000多个, 同时对之前版本的结构也发生了一些变化,虽然不如有些特性像temporary undo\immemory ...

  7. oracle 12c undo,Oracle 12c 新特性之临时Undo--temp_undo_enabled

    Oracle 12c 新特性之临时Undo--temp_undo_enabled 每个 Oracle 数据库包含一组与系统相关的表空间,例如 SYSTEM , SYSAUX , UNDO&TE ...

  8. Oracle 12c 新特性

    Oracle数据库12c的一些新特性总结,包括数据库管理.RMAN.高可用性以及性能调优等内容. 主要内容: 在线迁移活跃的数据文件 表分区或子分区的在线迁移 不可见字段 相同字段上的多重索引 DDL ...

  9. Oracle 12c新特性对于业务上的一些影响总结

    1.不可见字段 在Oracle 11g R1中,Oracle以不可见索引和虚拟字段的形式引入了一些不错的增强特性.继承前者并发扬光大,Oracle 12c R1中引入了不可见字段思想.在之前的版本中, ...

最新文章

  1. php无限极分类并添加指定值,PHP实现无限极分类的两种方式,递归和引用
  2. 3分钟解决MySQL 1032 主从错误(转)
  3. TSQL查询内幕::(2.3)查询计划与更新计划
  4. GDCM:gdcm::ServiceClassUser的测试程序
  5. 【ArcGIS风暴】ArcGIS 10.2栅格计算器实用公式大全(经典珍藏版)
  6. Kafka(六)Kafka基本客户端命令操作
  7. python Django创建数据库时can't open file 'manage.py': [Errno 2] No such file or directory
  8. Springboot整合netty实战
  9. 使用python统计出txt文档中含有某个单词的个数
  10. oracle导入的表在哪,oracle导入导出表及表结构
  11. Android Audio子系统路由策略(三十六)
  12. struts标签的使用
  13. miui11稳定版获取完整root_怎么获取root权限-MIUI11系统开启系统ROOT权限图文教程-支持小米红米全部机型...
  14. 【规范】万字集大成的C编写规范
  15. 使用伪类来实现类似微信群聊的头像样式
  16. pytorch中的register_parameter()和parameter()
  17. grafana设置主页面板
  18. php随机生成手机号码
  19. i3-10110U和i5 10210u 哪个好
  20. 使用深度学习进行三维脑肿瘤分割

热门文章

  1. [唐诗]古风(其三)-李白
  2. 李宏毅深度学习|Datawhale-7月 Task07 总结
  3. Centos 7 生产环境优化 Mysql 5.7
  4. android 使用广播监听网络切换
  5. Oracle实验五 PL/SQL编程
  6. 005 Linux系统内存错误产生的原因及调试方法(段错误|core dumped)
  7. CF 1438 D. Powerful Ksenia
  8. JavaScript - Echarts经典教程-李游Leo-专题视频课程
  9. 有什么适合学生党使用的无线蓝牙耳机?四款学生党无线耳机
  10. 企业微信上传文件到服务器,上传素材到腾讯企业微信服务器