Utilización eficaz de cursores desplazables
Los cursores con desplazamiento bidireccional son una herramienta útil para escribir aplicaciones como, por ejemplo, aplicaciones basadas en pantalla, en las que la tabla de resultados es pequeña y se suele avanzar y retroceder por los datos.
Procedimiento
Para obtener el mejor rendimiento de los cursores desplazables:
- Determine cuándo es mejor utilizar cursores con desplazamiento
bidireccional.
Los cursores desplazables requieren más procesos de Db2 que los cursores no desplazables. Si las aplicaciones requieren tablas de resultados grandes o tan solo necesita avanzar secuencialmente por los datos, utilice cursores sin desplazamiento bidireccional.
- Declare cursores con desplazamiento bidireccional como SENSITIVE sólo si
necesita ver los datos más recientes.
Si no necesita ver actualizaciones realizadas por otros cursores o procesos de aplicación, utilizar un cursor que declare como INSENSITIVE requiere menos proceso por parte de Db2.
Si sólo necesita ver algunas de las actualizaciones más recientes y no necesita ver los resultados de las operaciones de inserción, declare los cursores con desplazamiento bidireccional como SENSITIVE STATIC.
Si necesita ver todas las actualizaciones e inserciones más recientes, declare los cursores con desplazamiento bidireccional como SENSITIVE DYNAMIC.
- Para asegurar la máxima simultaneidad al utilizar un cursor con desplazamiento bidireccional para operaciones de supresión y actualización posicionadas, especifique ISOLATION(CS) y CURRENTDATA(NO) al vincular paquetes y planes que contengan cursores con desplazamiento bidireccional actualizables.
- Utilice la cláusula FETCH FIRST n ROWS ONLY con cursores desplazables cuando sea apropiado.En un entorno distribuido, cuando necesite recuperar un número limitado de filas, FETCH FIRST n ROWS ONLY puede mejorar su rendimiento para consultas distribuidas que utilizan acceso DRDA al eliminar el tráfico de red innecesario.
En un entorno local, si necesita desplazarse por un subconjunto limitado de filas de una tabla, puede utilizar FETCH FIRST n ROWS ONLY para hacer que la tabla de resultados sea más pequeña.
- En un entorno distribuido, si no necesita utilizar los cursores con
desplazamiento bidireccional para modificar datos, realice el proceso de cursor
en un procedimiento almacenado.La utilización de procedimientos almacenados puede reducir la cantidad de tráfico de red que la aplicación necesita.
- En una base de datos de archivo de trabajo, cree espacios de tabla que
sean suficientemente grandes para el proceso de los cursores con desplazamiento
bidireccional.Db2 utiliza tablas temporales declaradas para procesar los siguientes tipos de cursores desplazables:
- SENSITIVE STATIC SCROLL
- INSENSITIVE SCROLL
- ASENSITIVE SCROLL, si la sensibilidad del cursor es INSENSITIVE. Un cursor que cumple los criterios para un cursor de sólo lectura tiene una sensibilidad efectiva de INSENSITIVE.
- Confirme los cambios con frecuencia por los motivos siguientes:
- Suele necesitar dejar abiertos los cursores con desplazamiento bidireccional más tiempo que los cursos sin desplazamiento bidireccional.
- Se produce un aumento de la posibilidad de puntos muertos con cursores con desplazamiento bidireccional debido a que estos cursores permiten acceso y actualización a filas en cualquier orden. Confirmaciones frecuentes pueden reducir la posibilidad de puntos muertos.
- Para evitar que los cursores se cierren después de operaciones de confirmación, declare los cursores con desplazamiento bidireccional con WITH HOLD.
- Utilice los métodos siguientes para impedir indicaciones falsas de falta
de espacio:
- Compruebe las aplicaciones de forma que confirmen con frecuencia.
- Cierre los cursores desplazables sensibles tan pronto como ya no sean necesarios.
- Elimine la opción WITH HOLD para el cursor desplazable sensible, si es posible
- Aísle los espacios de tabla LOB en una agrupación de almacenamiento intermedio dedicada en el entorno de compartimiento de datos.
Mientras que los cursores desplazables estáticos sensibles están abiertos para una tabla, Db2 no permite la reutilización del espacio en ese espacio de tabla para evitar que el cursor desplazable capte filas recién insertadas que no estaban en el conjunto de resultados original. Aunque esto es normal, puede tener como resultado una indicación de falta de espacio aparentemente falsa. El problema puede notarse más en un entorno de compartimiento de datos con transacciones que accedan a LOB.Además del problema de reutilización de espacio, el uso del cursor desplazable estático sensible en un entorno de uso compartido de datos puede resultar también en la contención de bloqueo en sentencias INSERT si los objetos insertados se encuentran en la misma agrupación de almacenamiento intermedio. Esta situación se da independientemente de que los objetos tengan cursores desplazables estáticos sensibles y de que los objetos contenga columnas LOB o no. Puede minimizar este problema aislando objetos con un gran volumen de actividad de inserción de manera que se encuentren en una agrupación de almacenamiento intermedio dedicada del entorno de uso compartido de datos.
- No especifique ningún cursor desplazable estático
sensible si se necesita un acceso a índice para un índice basado en expresión.