Puede hacer un mejor uso de sus recursos y mejorar la concurrencia al comprender los efectos de los parámetros que utiliza Db2 para controlar los bloqueos
Antes de empezar
Algunos
problemas de rendimiento podrían parecer problemas de bloqueo, aunque en
realidad sean problemas de otra parte del sistema. Por ejemplo, la exploración
de espacios de tabla de una tabla grande puede hacer que se superen tiempos de espera. De forma parecida, si hay tareas esperando o que se intercambian y la unidad de
trabajo no se ha confirmado, las tareas todavía retienen bloqueos. Cuando un sistema
tiene una carga alta, la contienda por los recursos de proceso, E/S y almacenamiento
también produce esperas.
Por tanto, puede tener en cuenta los métodos
siguientes antes de realizar acciones específicas para ajustar los bloqueos:
- Resuelva los problemas globales de rendimiento del sistema, del subsistema y de
la aplicación para asegurarse de que no solo elimina síntomas de bloqueo, sino que
también corrige otros problemas de rendimiento subyacentes.
- Reduzca el número de hebras o iniciadores.
- Aumente la prioridad de las tareas de Db2 en el sistema.
- Aumente la cantidad de recursos de procesador, E/S y memoria real.
Acerca de esta tarea
Es posible que no hay que hacer nada respecto a los bloqueos de Db2. Las solicitudes de bloqueo explícitas no son necesarias para evitar que aplicaciones simultáneas
lean o modifiquen datos sin confirmar. Las aplicaciones adquieren bloqueos implícitos bajo el control de Db2 para conservar la integridad de los datos. Sin embargo, a veces los bloqueos pueden producir problemas
de rendimiento debido a contiendas, como situaciones de suspensión, tiempo
de espera excedido y punto muerto.
En ocasiones dichas situaciones se pueden impedir si se tiene
en cuenta la simultaneidad al diseñar las opciones de sistema y subsistema, las bases de datos
y las aplicaciones.
Procedimiento
Para lograr una simultaneidad aceptable en los subsistemas Db2, puede seguir determinadas recomendaciones básicas. Las recomendaciones que
se describen aquí son puntos de partida básicos para mejorar la simultaneidad. Por tanto, puede ser necesario un análisis detallado del diseño de datos
y de las aplicaciones para lograr la mejor simultaneidad posible:
- Enlazar la mayoría de las aplicaciones con las opciones ISOLATION(CS) y CURRENTDATA(NO).
Estas opciones permiten a Db2 liberar los bloqueos antes de tiempo y evitarlos en muchos casos.
- Utilice el programa de utilidad REORG para mantener los datos
organizados.
Al hacerlo, se pueden impedir las solicitudes de bloqueo y desbloqueo adicionales para situaciones como, por ejemplo, actualizaciones de filas comprimidas y de longitud variable y bloqueos de liberación automática para entradas y claves de índice pseudosuprimidas. Puede habilitar la limpieza automática de entradas de índice pseudoeliminadas estableciendo el parámetro del subsistema INDEX_CLEANUP_THREADS en un valor distinto de cero.
- Utilice LOCKSIZE
ANY o PAGE como diseño predeterminado. Piense en usar LOCKSIZE ROW solo cuando las aplicaciones
encuentran una contención de bloqueo significativa, incluidos puntos muertos y tiempos de espera excedidos.
LOCKSIZE
ANY es el valor por omisión para CREATE TABLESPACE. Permite a Db2 elegir el tamaño de bloqueo, y Db2 suele elegir LOCKSIZE PAGE y LOCKMAX SYSTEM para espacios de tabla no LOB/no XML. Para espacios de tabla LOB, Db2 elige LOCKSIZE LOB y LOCKMAX SYSTEM. Del mismo modo, para los espacios de tabla XML, Db2 elige LOCKSIZE XML y LOCKMAX SYSTEM.
El bloqueo en nivel
de página normalmente da como resultado menos solicitudes para bloquear y desbloquear datos
para la manipulación y el acceso secuencial, lo que se traduce en una reducción
del coste de CPU. El bloqueo en nivel de página también es más probable que produzca
filas insertadas secuencialmente en la misma página de datos. Bloqueo a nivel de fila con MAXROWS= 1 puede sufrir bloqueos P de páginas de datos en entornos de compartición de datos. Sin embargo, el bloqueo a nivel
de página, puede evitar los bloqueos P de páginas de datos cuando MAXROWS=1.
El bloqueo en nivel de fila proporciona una mejor simultaneidad porque
los bloqueos son más granulares. Sin embargo, el coste de cada solicitud de bloqueo
y desbloqueo es aproximadamente el mismo para el bloqueo en nivel de página y de fila. Por
lo tanto, el bloqueo en nivel de fila probablemente supondrá un coste de CPU adicional. El bloqueo a nivel de fila también puede dar como resultado más contención de retención de las
páginas de datos. Es menos probable
que las filas insertadas secuencialmente por medio de hebras simultáneas estén en la
misma página de datos bajo un bloqueo en nivel de fila.
- Reduzca la contención
de bloqueo en el catálogo y el directorio para operaciones de definición
de datos, de enlace y de programas de utilidad.
Pueden utilizarse los siguientes métodos
para reducir este tipo de contienda:
- Reduzca el número de objetos por base de datos.
- Agrupe las sentencias de definición de datos de la misma base de datos dentro
del mismo ámbito de confirmación, excepto las sentencias de manipulación de datos,
y confirme con frecuencia.
- Asigne un ID de autorización exclusivo y una base de datos privada para cada
usuario.
- Evite utilizar sentencias LOCK TABLE y sentencias que utilicen aislamiento RR
para consultar el catálogo.
- Especifique las opciones
TRACKMOD NO y MEMBER CLUSTER cuando cree espacios de tabla.
Estas opciones pueden reducir el bloqueo físico y la contención de retención de página en páginas de mapa de espacios durante inserciones pesadas en espacios de tabla dependientes de GBP. TRACKMOD NO no se puede utilizar cuando se utilizan copias incrementales de imágenes para los espacios de tabla.
- Utilice la opción de enlace
RELEASE(DEALLOCATE) para evitar el coste de liberar y volver a adquirir bloqueos
repetidamente para aplicaciones que utilizan puntos de confirmación frecuentes
para un acceso repetido a los mismos espacios de tabla.
- Utilice la opción de enlace RELEASE(COMMIT)
para planes o paquetes que se utilicen con menos frecuencia para evitar un aumento
excesivo del almacenamiento de agrupaciones EDM.
- En
cargas de trabajo mixtas de INSERT, UPDATE y DELETE, tenga en cuenta las opciones LOCKSIZE
PAGE y MAXROWS 1 para reducir la contención de cierre de página en páginas de datos. No utilice LOCKSIZE ROW para esas cargas de trabajo mezcladas, independientemente de
si se utiliza MEMBER CLUSTER.
MAXROWS
1 solo se recomienda si se encuentran niveles altos de bloqueo o de contención
de retención. Por contra, es posible que aumenten las operaciones de E/S de obtención
de página y de lectura-escritura. Si se utiliza MAXROWS 1, el número de páginas
necesario para contener los datos puede aumentar en tantas filas como quepan
en una página. Por ejemplo, si caben 20 filas en una sola página, el
resultado es un aumento de 20 veces el número de páginas utilizado. Otro
resultado es una reducción significativa de la proporción de coincidencias
de la agrupación de almacenamiento intermedio.
Qué hacer a continuación
En los subsistemas Db2 que son miembros de grupos de compartición de datos, se aplican recomendaciones adicionales. Para obtener información sobre cómo mejorar la concurrencia en grupos de intercambio de datos, consulte Mejorar la concurrencia en entornos de intercambio de datos.