Sentencias de SQL con BLOCKING
SQL estático y dinámico
146
Guía del usuario de DB2 Connect
agrupación de datos en bloques aumenta el tiempo de recuperación para la
primera fila, pero mejora el tiempo de recuperación para las filas
subsiguientes.
Otro aspecto importante es la cantidad de memoria que se utiliza. El
conjunto de páginas activas de la memoria suele aumentar cuando la
agrupación de datos en bloques está activada.
DB2 Connect permite controlar la cantidad de datos que se transfieren en
cada bloque.
Para solicitar la agrupación de datos en bloques, utilice la opción BLOCKING
del mandato prep o bind. La agrupación de datos en bloques está activada
si:
v El cursor es de sólo lectura o
v El cursor es ambiguo y la agrupación de datos en bloques se especifica
durante la operación prep o bind.
Nota: Cuando se utiliza SQL dinámico, el cursor siempre es ambiguo.
Las sentencias SELECT actualizables (las que utilizan las sentencias
UPDATE/DELETE WHERE CURRENT OF) son consultas que no permiten la
agrupación por bloques, así que sólo deberían utilizarse en caso
absolutamente necesario.
Una sentencia SELECT actualizable garantiza que la fila no ha cambiado
entre el momento en el que finaliza la sentencia SELECT y la emisión de la
sentencia UPDATE/DELETE. Si este nivel de simultaneidad no resulta
importante para su aplicación, puede utilizar como método alternativo una
sentencia DELETE o UPDATE con criterios de búsqueda que se basen en
los valores devueltos en una sentencia SELECT no actualizable.
Para las sentencias SELECT de sólo lectura especifique FOR FETCH ONLY, a
no ser que utilice VM y VSE, donde esta opción no recibe soporte.
Utilice el SQL estático siempre que sea posible. Impide la preparación de
secciones de SQL en tiempo de ejecución y los cursores ambiguos. Si no es
posible evitar el SQL dinámico, puede realiza lo siguiente para minimizar
el tráfico de la red y mejorar el rendimiento:
v Si se trata de una sentencia SELECT que debe prepararse, emita un
SQLDA PREPARE ... INTO. El SQLDA debería asignarse en el tamaño
completo necesario para sus valores. Si el número máximo de columnas
es x y se espera que continúe así, asigne un SQLDA con x SQLVAR. Si el
número posible de columnas es incierto (y la memoria no resulta ningún
problema), utilice el número máximo de SQLVAR (256).
Si la asignación de SQLDA carece del tamaño suficiente para almacenar
el SQLDA de devolución, el programa debe emitir otra sentencia
DESCRIBE con un SQLDA con el tamaño suficiente para volver a
almacenar el resultado. Esto aumentaría el tráfico de la red.
No utilice la secuencia PREPARE y DESCRIBE. Se consigue un mejor
rendimiento utilizando la sentencia PREPARE.....INTO.
v Ejecute sentencias COMMIT o ROLLBACK de SQL vinculadas
estáticamente en lugar de sentencias COMMIT o ROLLBACK dinámicas.