Anatomía de un perfil de optimización

Un perfil de optimización puede contener directrices de optimización global y puede contener directrices de optimización específicas que se aplican a sentencias DML individuales de un paquete. Las directrices de optimización global se aplican a todas las sentencias de lenguaje de manipulación de datos (DML) que se ejecutan mientras el perfil está en vigor.

Por ejemplo:
  • Puede escribir una directriz de optimización global solicitando que el optimizador haga referencia a las tablas de consulta materializada (MQT) Test.SumSales y Test.AvgSales siempre que se procese una sentencia mientras el perfil de optimización actual esté activo.
  • Puede escribir una directriz de optimización de nivel de sentencia solicitando que el optimizador utilice el índice I_SUPPKEY para acceder a la tabla PROVEEDORES siempre que el optimizador encuentre la sentencia especificada.
Puede especificar estos dos tipos de directrices en las dos secciones principales de un perfil de optimización:
  • La sección de directrices de optimización global puede contener un elemento OPTGUIDELINES
  • La sección de perfiles de sentencia que puede contener cualquier número de elementos STMTPROFILE
Un perfil de optimización también debe contener un elemento OPTPROFILE, que incluye metadatos y directivas de proceso.
El código siguiente es un ejemplo de un perfil de optimización válido. El perfil de optimización contiene una sección de directrices de optimización global y una sección de perfil de sentencia con un 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>

Elemento OPTPROFILE

Un perfil de optimización empieza con el elemento OPTPROFILE. En el ejemplo anterior, este elemento consta de un atributo VERSION que especifica que la versión del perfil de optimización es 9.1.

La sección de directrices de optimización global

Las directrices de optimización global se aplican a todas las sentencias para las que el perfil de optimización está en vigor. La sección de directrices de optimización global se define en el elemento OPTGUIDELINES global. En el ejemplo anterior, esta sección contiene una única directriz de optimización global que indica al optimizador que tenga en cuenta las MQT Test.AvgSales y Test.SumSales al procesar cualquier sentencia para la que esté en vigor el perfil de optimización.

La sección de perfil de sentencia

Un perfil de sentencia define directrices de optimización que se aplican a una sentencia específica. Puede haber cero o más perfiles de sentencia en un perfil de optimización. La sección de perfil de sentencia se define en el elemento STMTPROFILE. En el ejemplo anterior, esta sección contiene directrices para una sentencia específica para la que el perfil de optimización está en vigor.

Cada perfil de sentencia contiene una clave de sentencia y directrices de optimización a nivel de sentencia, representadas por los elementos STMTKEY y OPTGUIDELINES, respectivamente:
  • La clave de sentencia identifica la sentencia a la que se aplican las directrices de optimización a nivel de sentencia. En el ejemplo, el elemento STMTKEY contiene el texto de la sentencia original y otra información necesaria para identificar sin ambigüedades la sentencia. Utilizando la clave de sentencia, el optimizador compara un perfil de sentencia con la sentencia adecuada. Esta relación le permite proporcionar directrices de optimización para una sentencia sin tener que modificar la aplicación.
  • La sección de directrices de optimización a nivel de sentencia del perfil de sentencia se representa mediante el elemento OPTGUIDELINES. Esta sección está formada por una o más solicitudes de acceso o unión, que especifican métodos para acceder o unir tablas en la sentencia. Después de una coincidencia satisfactoria con la clave de sentencia en un perfil de sentencia, el optimizador hace referencia a las directrices de optimización de nivel de sentencia asociadas al optimizar la sentencia. El ejemplo contiene una solicitud de acceso, que especifica que la tabla PROVEEDORES a la que se hace referencia en la subselección anidada utiliza un índice denominado I_SUPPKEY.

Elementos comunes a las secciones de perfil de sentencia y directrices de optimización global

Aparte del elemento OPTGUIDELINES, el elemento REGISTRY y STMTMATCH son otros elementos disponibles para estas dos secciones:
  • El elemento REGISTRY puede establecer determinadas variables de registro a nivel de sentencia o a nivel global. El elemento REGISTRY está anidado en el elemento OPTGUIDELINES.

    El elemento REGISTRY contiene un elemento OPTION. El elemento OPTION tiene los atributos NAME y VALUE que se utilizan para establecer el valor de la variable de registro con nombre.

    Si especifica un valor para una variable de registro a nivel global, dicho valor se aplica a todas las sentencias de la conexión en la que se aplica el perfil. Si especifica un valor para una variable de registro en el nivel de sentencia, dicho valor sólo se aplica a dicha sentencia dentro de STMTKEY. Este valor en el nivel de sentencia tiene prioridad sobre el valor en el nivel global.

  • El elemento STMTMATCH establece el tipo coincidente utilizado cuando la sentencia de compilación coincide con las sentencias del perfil de optimización.

    El elemento STMTMATCH tiene un atributo EXACT que se puede establecer en TRUE o FALSE. El valor predeterminado de STMTMATCH EXACT es TRUE.

    Si STMTMATCH EXACT se establece en TRUE, se aplica la coincidencia exacta. Si STMTMATCH EXACT se establece en FALSE, se aplica una coincidencia inexacta.