explain - automatic DOP: skipped because of IO calibrate statistics are missing - 11g

Durante a execução de um explain de uma query utilizando o hint parallel em um ambiente Oracle 11gR2 com o parâmetro paralllel_degree_policy definido como auto identifiquei a ocorrência da informação, nas notas do explain: - automatic DOP: skipped because of IO calibrate statistics are missing.

Automatic DOP significa Automatic degree Of Parallelism, uma feature introduzida na versão 11g que é controlada pelo parâmetro PARALLEL_DEGREE_POLICY, que definido como AUTO ativa a DOP quando utilizamos os hints parallel ou parallel(auto). Com esta opção o otimizador do Oracle define o grau de paralelismo através de métricas como as estatísticas coletadas e estatísticas de I/O.

Para mais detalhes sobre sobre paralelismo, recomendo a leitura do artigo Um pouco sobre paralelismo em Oracle Database 11g escrito por Joel Pérez e Jean Maia.
Bom, voltando a nosso cenário, abaixo segue o exemplo do explain gerado.
bidwp@SYS> explain plan for
select /*+ parallel */ * from dual;  2

Explained.

bidwp@SYS> set lines 190
set pages 10000
select * from table(dbms_xplan.display);bidwp@SYS> bidwp@SYS>

Plan hash value: 3543395131

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Note
-----
   - automatic DOP: skipped because of IO calibrate statistics are missing

12 rows selected.

bidwp@SYS>
Conforme pode ser constatado no DOC ID 1269321.1, se o processo de calibrate não tiver sido executado, afim de reunir as estatísticas necessárias para a execução da feature Automatic Degree of Parallelism, a mesma será ignorada devido a falta de estatísticas de "calibração" de IO. 
Para realizar a coleta das informações de IO o Oracle disponibiliza a package DBMS_RESOURCE_MANAGER.CALIBRATE_IO que é utilizada para a calibração.

O tempo de execução do processo de calibração está relacionado a quantidade de discos e nodes disponíveis. Mais informações sobre o processo de calibração podem ser verificas através do 11g Calibrate I/O Overview.
Vale destacar que é recomendado que o processo de calibrate seja executado em horário de menor pico para evitar impactos em ambientes produtivos.
Agora que sabemos que para utilização do DOP precisamos executar o calibrate, vamos executa-lo (Realizar as leituras recomendadas antes da execução).
lamimtst@SYS> set timing on
lamimtst@SYS> set time on
08:47:42 lamimtst@SYS> SET SERVEROUTPUT ON
DECLARE
   lat INTEGER;
   iops INTEGER;
   mbps INTEGER;
BEGIN
    --DBMS_RESOURCE_MANAGER.CALIBRATE_IO(, ,iops, mbps, lat);
    DBMS_RESOURCE_MANAGER.CALIBRATE_IO (28, 10, iops, mbps, lat);
   DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
   DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);
   dbms_output.put_line('max_mbps = ' || mbps);
08:47:50 lamimtst@SYS> 08:47:50   2  08:47:50   3  08:47:50   4  08:47:50   5  08:47:50   6  08:47:50   7  08:47:50   8  08:47:50   9  08:47:50  10  08:47:50  11  END;
08:47:50  12  /


max_iops = 6860
latency = 10
max_mbps = 1488

PL/SQL procedure successfully completed.

Elapsed: 00:05:33.56
Após executar o processo de calibrate, podemos validar se a execução ocorreu com sucesso, consultando a visão V$IO_CALIBRATION_STATUS.
lamimtst@SYS> select * from V$IO_CALIBRATION_STATUS;

READY         24-JUL-17 08.53.25.360 AM

Elapsed: 00:00:00.06
Agora, vamos executar um novo explain para validar se a DOP está ativa após nosso processo de calibração.
lamimtst@SYS>  explain plan for
select /*+ parallel */ * from dual; 08:55:22   2

Explained.

Elapsed: 00:00:00.01
08:55:23 lamimtst@SYS> set lines 190
set pages 10000
select * from table(dbms_xplan.display);08:55:28 lamimtst@SYS> 08:55:28 lamimtst@SYS>

Plan hash value: 3543395131

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Note
-----
   - automatic DOP: Computed Degree of Parallelism is 1

12 rows selected.

Elapsed: 00:00:00.01
08:55:29 lamimtst@SYS>
É possível constatar que agora o explain está utilizando a Automatic DOP e para nossa consulta, definiu o grau de paralelismo 1, conforme pode ser validado na nota do explain (- automatic DOP: Computed Degree of Parallelism is 1).

Fonte:http://www.oracle.com/technetwork/pt/articles/database-performance/paralelismo-oracle-database-11g-2802040-ptb.html
https://docs.oracle.com/database/121/VLDBG/GUID-70CAEDE1-A8D2-464A-9A0B-FDEAFBCA85C3.htm
https://support.oracle.com/epmos/main/downloadattachmentprocessor?parent=DOCUMENT&sourceId=727062.1&attachid=727062.1:CALIBRATEIO&clickstream=yes

Comentários