Bom dia!
Portilho, existe alguma boa pratica de que o paralelismo (degree) setado para a tabela deve ser o mesmo setado para o índice da tabela?
Att,
Fernando
Paralelismo Tabela x Índice
Re: Paralelismo Tabela x Índice
Acho que não faz sentido deixar igual.
O melhor ponto de paralelismo é relativo ao tamanho do objeto, à quantidade de CPUs disponíveis, e vazão do I/O.
Já que provavelmente a tabela e o índice terão tamanhos diferentes, o ponto ideal de DEGREE de paralelismo dos dois será diferente.
O paralelismo deve ter bom proveito em um Full Table Scan ou Fast Index Scan, e veja abaixo que para os dois tipos de operações, o Oracle considerou que o Custo é bem diferente para o mesmo grau de paralelismo.
O custo foi bem menor para o índice, já que é um objeto menor que a tabela.
SQL> SELECT /*+ PARALLEL(T2 4) FULL(T) */ COUNT(*) FROM T;
COUNT(*)
----------
84938
Plano de ExecuþÒo
----------------------------------------------------------
Plan hash value: 3126468333
--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 68 (0)| 00:00:01 | | | |
| 1 | SORT AGGREGATE | | 1 | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | | Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | | 1 | | | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | | 98997 | 68 (0)| 00:00:01 | Q1,00 | PCWC | |
| 6 | TABLE ACCESS FULL| T | 98997 | 68 (0)| 00:00:01 | Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------
SQL> SELECT /*+ PARALLEL(T2 4) INDEX_FFS(T,IDX_T) */ COUNT(*) FROM T;
COUNT(*)
----------
84938
Plano de ExecuþÒo
----------------------------------------------------------
Plan hash value: 350386828
-----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 11 (0)| 00:00:01 | | | |
| 1 | SORT AGGREGATE | | 1 | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | | Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | | 1 | | | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | | 98997 | 11 (0)| 00:00:01 | Q1,00 | PCWC | |
| 6 | INDEX FAST FULL SCAN| IDX_T | 98997 | 11 (0)| 00:00:01 | Q1,00 | PCWP | |
-----------------------------------------------------------------------------------------------------------
SQL>
O melhor ponto de paralelismo é relativo ao tamanho do objeto, à quantidade de CPUs disponíveis, e vazão do I/O.
Já que provavelmente a tabela e o índice terão tamanhos diferentes, o ponto ideal de DEGREE de paralelismo dos dois será diferente.
O paralelismo deve ter bom proveito em um Full Table Scan ou Fast Index Scan, e veja abaixo que para os dois tipos de operações, o Oracle considerou que o Custo é bem diferente para o mesmo grau de paralelismo.
O custo foi bem menor para o índice, já que é um objeto menor que a tabela.
SQL> SELECT /*+ PARALLEL(T2 4) FULL(T) */ COUNT(*) FROM T;
COUNT(*)
----------
84938
Plano de ExecuþÒo
----------------------------------------------------------
Plan hash value: 3126468333
--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 68 (0)| 00:00:01 | | | |
| 1 | SORT AGGREGATE | | 1 | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | | Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | | 1 | | | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | | 98997 | 68 (0)| 00:00:01 | Q1,00 | PCWC | |
| 6 | TABLE ACCESS FULL| T | 98997 | 68 (0)| 00:00:01 | Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------
SQL> SELECT /*+ PARALLEL(T2 4) INDEX_FFS(T,IDX_T) */ COUNT(*) FROM T;
COUNT(*)
----------
84938
Plano de ExecuþÒo
----------------------------------------------------------
Plan hash value: 350386828
-----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 11 (0)| 00:00:01 | | | |
| 1 | SORT AGGREGATE | | 1 | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | | Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | | 1 | | | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | | 98997 | 11 (0)| 00:00:01 | Q1,00 | PCWC | |
| 6 | INDEX FAST FULL SCAN| IDX_T | 98997 | 11 (0)| 00:00:01 | Q1,00 | PCWP | |
-----------------------------------------------------------------------------------------------------------
SQL>