Reserva de espacio libre en espacios de tabla

Reservando el espacio libre de los espacios de tabla puede habilitar los datos para que permanezcan agrupados en clúster más tiempo entre las organizaciones y puede reducir el número de referencias indirectas y registros de desbordamiento que pueden dañar el rendimiento.

Antes de empezar

Iniciar la información de la interfaz de programación de uso general.Para determinar la cantidad de espacio libre que hay disponible actualmente en una página, ejecute la utilidad RUNSTATS y examine la columna PERCACTIVE de la tabla del catálogo SYSIBM.SYSTABLEPART.

Acerca de esta tarea

Cuando no hay suficiente espacio libre disponible para operaciones de inserción o actualización, Db2 suele añadir filas nuevas al final de la tabla, fuera de la secuencia de clústeres. Cuando las actualizaciones de filas existentes indican que no pueden caber en la página original, Db2 crea referencias indirectas a registros de desbordamiento en páginas de datos diferentes. Cuando varios de estos registros se encuentren ubicados físicamente fuera de secuencia, el rendimiento se ve afectado negativamente.

Por tanto, una cantidad suficiente de espacio libre puede proporcionar las ventajas siguientes durante un proceso normal:

  • Las filas de datos pueden permanecer en clúster mucho después de que los datos se reorganicen o se carguen, ya que no son necesarias inserciones aleatorias. Una buena agrupación en clúster puede mejorar las proporciones de coincidencias de almacenamiento intermedio y permite usar más la captación previa dinámica. Sin agrupación en clúster, las consultas deben depender de la captación previa de lista para tener un rendimiento adecuado. La agrupación en clúster puede ser menos importante si el hardware de almacenamiento utiliza unidades de control más nuevas y discos de estado sólido que puedan procesar la captación previa de lista con eficiencia.
  • Las referencias indirectas se pueden evitar. Las referencias indirectas se crean cuando una operación de actualización aumenta el tamaño de una fila y esta no cabe en la página original que contenía la fila. Db2 almacena la fila en una página de desbordamiento y el RID original apunta al RID de desbordamiento. Las referencias indirectas solo se producen con filas de longitud variable. La causa más común de las referencias indirectas es el uso de columnas que admiten nulos VARCHAR que inicialmente contienen valores nulos y que luego se actualizan con valores no nulos. Las referencias indirectas son especialmente problemáticas en consultas que utilizan acceso aleatorio o captación previa de lista. Estos pueden provocar costes adicionales de CPU y más E/S síncrona. Db2 no puede utilizar la obtención previa de listas para leer registros desbordados. Se pueden supervisar las columnas NEARINDREF y FARINDREF de la tabla de catálogo SYSIBM.SYSTABLEPART para encontrar cuántas filas disponen de referencias indirectas.
  • Un bloqueo de página único bloquea menos filas de datos, lo que reduce la contienda cuando se utiliza bloqueo de nivel de página.

Sin embargo, especificar demasiado espacio libre también tiene desventajas, incluida las siguientes:

  • Se utiliza más espacio de disco para la misma cantidad de datos.
  • Una única operación de E/S puede transferir menos información.
  • La misma cantidad de datos ocupa más páginas, que deben explorarse.
  • Las agrupaciones de almacenamiento intermedio y la caché del controlador de almacenamiento no se pueden utilizar con tanta eficiencia.
En ciertas situaciones como las siguientes, puede que no tenga que reservar ningún espacio libre:
  • En el caso de objetos de sólo lectura. Si no piensa insertar ni actualizar datos en una tabla, no se necesita espacio libre para el espacio de tabla.
  • El objeto no es de sólo lectura, pero las inserciones se sitúan al final y las actualizaciones que alargan las columnas de longitud variable son pocas.

Procedimiento

Para mejorar el uso de espacio libre, utilice los métodos siguientes:

  • Utilice la cláusula PCTFREE en la mayoría de las situaciones.
    La cláusula PCTFREE especifica el porcentaje de cada página de datos de un espacio de tabla que se deja libre cuando se cargan o se reorganizan los datos.

    Por ejemplo, el valor predeterminado de PCTFREE para espacios de tabla es 5, lo que significa que el 5% de cada página se deja libre cuando se cargan o se reorganizan los datos.

    Db2 se reserva la cantidad especificada de espacio libre cuando los datos se cargan en la tabla o se reorganizan mediante operaciones de utilidad. Db2 utiliza el espacio libre más tarde cuando inserta o actualiza los datos. Con independencia de los valores de PCTFREE especificados, como mínimo siempre se inserta una fila en cada página de datos.

    El valor de PCTFREE se aplica a los espacios de tabla de tablas organizadas por hash solo si se invoca el programa de utilidad REORG TABLESPACE y se especifica la opción AUTOESTSPACE(YES).

  • En el caso de espacios de tabla con mucha actividad de actualización (y en especial para datos comprimidos), especifique un valor de PCTFREE FOR UPDATE.
    El valor de FOR UPDATE especifica el porcentaje de cada página que se reserva para que lo usen solo operaciones de actualización futuras. Cuando se especifica FOR UPDATE -1, Db2 utiliza estadísticas en tiempo real para calcular automáticamente la cantidad de espacio libre que se debe reservar para las actualizaciones.

    El valor predeterminado de FOR UPDATE lo define el valor del parámetro de subsistema PCTFREE_UPD.

    Si se especifican valores tanto de PCTFREE como de FOR UPDATE, el porcentaje de espacio libre reservado por una operación de REORG o LOAD REPLACE es la suma de los dos valores.

  • Si conoce el número de filas que caben en una página de datos con su tamaño máximo, utilice la cláusula MAXROWS para controlar el número de filas por página.
    Sin embargo, un valor de MAXROWS que sea demasiado pequeño es probable que malgaste espacio de disco, y un valor de MAXROWS demasiado grande no es probable que evite las referencias indirectas. La cláusula MAXROWS tiene la ventaja de mantener el espacio libre, aunque se inserten datos nuevos.
  • Utilice la cláusula FREEPAGE para especificar la frecuencia con la que Db2 deja una página completa de espacio libre al cargar datos o al reorganizarlos.
    Por ejemplo, si especifica FREEPAGE 10, Db2 deja libre una de cada 10 páginas.
    El uso de la cláusula FREEPAGE es más adecuada en las situaciones siguientes:
    • Si MAXROWS es 1 o las filas son mayores de media página. La cláusula PCTFREE no tiene ningún impacto en este caso porque Db2 no puede insertar una segunda fila en una página.
    • Si es necesario espacio libre adicional para espacios de tabla de catálogo e índices. Se recomienda utilizar siempre los valores predeterminados de PCTFREE para objetos de catálogo.
  • Puede utilizar valores de MAXROWS para mejorar la simultaneidad en tablas pequeñas y espacios de tablas compartidos que utilicen bloqueo en nivel de página.
    Este método reduce el número de filas por página, lo que ayuda a evitar contención de bloqueo. Sin embargo, el uso de bloqueo en nivel de fila es una alternativa a este método, y puede ser preferible en muchas situaciones.