Anatomia de um perfil de otimização

Um perfil de otimização pode conter diretrizes de otimização global, e pode conter diretrizes de otimização específicas que se aplicam a instruções individuais do DML em um pacote. Diretrizes de otimização global aplicam-se a todas as instruções de linguagem de manipulação de dados (DML) que são executadas enquanto o perfil está em vigor.

Por exemplo:
  • Você poderia gravar uma orientação de otimização global solicitando que o otimizador se referisse às tabelas de consulta materializada (MQTs) Test.SumSales e Test.AvgSales sempre que uma instrução fosse processada enquanto o perfil de otimização atual estava ativo.
  • Você poderia escrever uma diretriz de otimização de nível de instrução solicitando que o otimizador utilize o índice I_SUPPKEY para acessar a tabela FORNECEDORES sempre que o otimizador encontrar a instrução especificada.
Você pode especificar esses dois tipos de diretrizes nas duas principais seções de um perfil de otimização:
  • A seção de diretrizes de otimização global pode conter um elemento OPTGUIDELINES
  • A seção de perfis de instrução que pode conter qualquer número de elementos STMTPROFILE
Um perfil de otimização também deve conter um elemento OPTPROFILE, que inclui metadados e diretivas de processamento.
O código a seguir é um exemplo de um perfil de otimização válido. O perfil de otimização contém uma seção de diretrizes de otimização global e uma seção de perfil de instrução com um elemento STMTPROFILE.
<?xml version="1.0" encoding="UTF-8"?>
<OPTPROFILE>

  <!--
       Global optimization guidelines section.
       Optional but at most one.
  -->
  <OPTGUIDELINES>
    <MQT NAME="Test.AvgSales"/>
    <MQT NAME="Test.SumSales"/>
  </OPTGUIDELINES>

  <!--
       Statement profile section.
       Zero or more.
  -->
  <STMTPROFILE ID="Guidelines for SAMP Q9">
    <STMTKEY SCHEMA="SAMP">
      <![CDATA[SELECT S.S_NAME, S.S_ADDRESS, S.S_PHONE,
S.S_COMMENT FROM PARTS P, SUPPLIERS S, PARTSUPP PS
WHERE P_PARTKEY = PS.PS_PARTKEY AND S.S_SUPPKEY = PS.PS_SUPPKEY
AND P.P_SIZE = 39 AND P.P_TYPE = 'BRASS'
AND S.S_NATION = 'MOROCCO' AND S.S_NATION IN ('MOROCCO', 'SPAIN')
AND PS.PS_SUPPLYCOST = (SELECT MIN(PS1.PS_SUPPLYCOST)
FROM PARTSUPP PS1, SUPPLIERS S1
WHERE P.P_PARTKEY = PS1.PS_PARTKEY AND S1.S_SUPPKEY = PS1.PS_SUPPKEY
AND S1.S_NATION = S.S_NATION)]]>
    </STMTKEY>
    <OPTGUIDELINES>
      <IXSCAN TABID="Q1" INDEX="I_SUPPKEY"/>
    </OPTGUIDELINES>
  </STMTPROFILE>

</OPTPROFILE>

O elemento OPTPROFILE

Um perfil de otimização começa com o elemento OPTPROFILE. No exemplo anterior, esse elemento consiste em um atributo VERSION que especifica que a versão do perfil de otimização é 9.1

A seção de diretrizes de otimização global

Diretrizes de otimização global aplicam-se a todas as instruções para as quais o perfil de otimização está em vigor. A seção de diretrizes de otimização global é definida no elemento OPTGUIDELINES global. No exemplo anterior, esta seção contém uma única diretriz de otimização global informando ao otimizador para considerar os MQTs Test.AvgSales e Test.SumSales ao processar quaisquer instruções para as quais o perfil de otimização está em vigor

A seção de perfil de instrução

Um perfil de instrução define diretrizes de otimização que se aplicam a uma instrução específica. Pode haver zero ou mais perfis de instrução em um perfil de otimização. A seção de perfil de instrução é definida no elemento STMTPROFILE. No exemplo anterior, esta seção contém diretrizes para uma instrução específica para a qual o perfil de otimização está em vigor.

Cada perfil de instrução contém uma chave de instrução e diretrizes de otimização de nível de instrução, representada pelos elementos STMTKEY e OPTGUIDELINES, respectivamente:
  • A chave de instrução identifica a instrução a que se aplicam as diretrizes de otimização de nível de instrução. No exemplo, o elemento STMTKEY contém o texto de instrução original e outras informações necessárias para identificar inequivocamente a instrução. Usando a tecla de instrução, o otimizador corresponde a um perfil de instrução com a instrução apropriada. Esse relacionamento possibilita fornecer diretrizes de otimização para uma instrução sem ter que modificar o aplicativo.
  • A seção de diretrizes de otimização de nível de instrução do perfil de instrução é representada pelo elemento OPTGUIDELINES. Esta seção é composta por um ou mais pedidos de acesso ou de junção, que especificam métodos para acessar ou unir tabelas no enunciado. Após uma correspondência bem-sucedida com a chave de instrução em um perfil de instrução, o otimizador refere-se às diretrizes de otimização de nível de instrução associadas ao otimizar a instrução. O exemplo contém uma solicitação de acesso, que especifica que a tabela FORNECEDORES referenciada na subselect nested use um índice denominado I_SUPPKEY.

Elementos comuns a ambas as diretrizes de otimização global e seções de perfil de instrução

Diferente do elemento OPTGUIDELINES o elemento REGISTRO e STMTMATCH são outros elementos disponíveis para ambas as seções:
  • O elemento REGISTRO pode configurar certas variáveis de registro em nível de instrução ou nível global. O elemento REGISTRO está aninhado no elemento OPTGUIDELINES.

    O elemento REGISTRO contém um elemento OPTION. O elemento OPTION possui atributos NOME e VALOR que são utilizados para configurar o valor da variável de registro nomeado.

    Se você especificar um valor para uma variável de registro em nível global, esse valor aplica-se a todas as instruções na conexão em que o perfil é aplicado. Se você especificar um valor para uma variável de registro no nível de instrução, esse valor aplica-se somente a essa instrução dentro do STMTKEY. Esse valor no nível de instrução tem precedência sobre o valor em nível global.

  • O elemento STMTMATCH define o tipo de correspondência utilizado quando a instrução compilada é corresponsável às instruções no perfil de otimização.

    O elemento STMTMATCH possui um atributo EXACT que pode ser configurado como TRUE ou FALSE. O valor padrão de STMTMATCH EXATO é TRUE.

    Se STMTMATCH EXATO for configurado para TRUE, correspondência exata será aplicada. Se STMTMATCH EXATO for configurado como FALSE, correspondência inexata é aplicada.