В базе данных я заметил запрос, выполняемый с общей подсказкой.
SELECT /*+ SHARED (8) */ ID from tab1
Я выполняю план запроса, чтобы узнать о нем больше, замечаю px send qc
, что означает параллельно
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost | Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 58773659 | 235094636 | 7389 | |
| 1 | PX COORDINATOR | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 58773659 | 235094636 | 7389 | |
| 3 | PX BLOCK ITERATOR | | 58773659 | 235094636 | 7389 | |
| 4 | INDEX FAST FULL SCAN | IDX_RTEST3 | 58773659 | 235094636 | 7389 | |
-----------------------------------------------------------------------------------------
Я выполнил параллельную подсказку и получил те же результаты. В чем разница между общей и параллельной подсказкой?
select /*+parallel(8) */ ID from tab1
На самом деле нет никакой разницы. В коде, сгенерированном Oracle, иногда используется shared
, но поскольку это не документировано, вам, вероятно, следует придерживаться parallel
в своем собственном коде.
См. документ MoS 2416478.1 для получения дополнительной информации — я не могу цитировать его, потому что для его просмотра требуется контракт на поддержку.
Подсказка SHARED аналогична подсказке PARALLEL, а SHARED(1) работает как подсказка NOPARALLEL для установки степени = 1.
Например:
Запрос 1:
set autot trace
select /*+ SHARED(8) */ * from <user_name>.<table_name>;
105 rows selected.
Elapsed: 00:00:00.03
Execution Plan
----------------------------------------------------------
Plan hash value: 1625188644
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 105 | 10185 | 2 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 105 | 10185 | 2 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 105 | 10185 | 2 (0)| 00:00:01 | Q1,00 | PCWC | |
| 4 | TABLE ACCESS FULL| <table_name> | 105 | 10185 | 2 (0)| 00:00:01 | Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------------
Запрос 2:
set autot trace
select /*+ SHARED(1) */ * from <user_name>.<table_name>;
105 rows selected.
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 1275100350
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 105 | 10185 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| <table_name> | 105 | 10185 | 2 (0)| 00:00:01 |
----------------------------------------------------------------------------
Пожалуйста, обратитесь к MOS: (ID документа 2416478.1).