Procesamiento de índices en paralelo en DB2 para i

Con IBM®DB2®for i, el procesamiento en paralelo sirve para mucho más que hacer consultas. Todas las actividades de procesamiento en lote, carga de datos y creación de índices pueden realizarse mucho más rápido si usa varios procesadores que se encarguen de ese trabajo.[19 de agosto de 2010: el autor actualizó este artículo con contenido basado en mejoras de DB2 para i Versión 7.1. —Ed.]

Kent Milligan, DB2 UDB Technology Specialist, IBM

KentKent Milligan is a DB2 for i Senior Certified IT specialist in IBM ISV Solutions Enablement for the IBM i platform. He spent the first eight years of his IBM career as a member of the DB2 development team in Rochester, Minnesota, and he speaks and writes regularly on DB2 for i relational database topics.



19-08-2010 (Primera publicación 09-01-2003)

Introducción

Cuando la gente piensa en procesamiento en paralelo en un motor de base de datos, inmediatamente lo asocian con una mejor respuesta en el tiempo deconsultaal tener varios procesadores trabajando en una misma consulta, pero se olvidan que el procesamiento en paralelo también puede acelerar el procesamiento deíndices, y por ende mejorar el rendimiento general de su servidor de bases de datos. Con IBM DB2 para i, es posible usar la CPU para el procesamiento de índices. Específicamente DB2 para i puede usar varios procesadores al momento de crear y actualizar índices mientras actualiza los datos subyacentes. La capacidad de crear y actualizar índices en paralelo se aplica tanto a la base de numeración binaria, como a las estructuras de índices de vector.

El procesamiento en paralelo de DB2 para i se encuentra solamente disponible en los sistemas IBM i en los cuales se compró, instaló y activó la característica de DB2 Symmetric MultiProcessing (DB2 SMP) con licencia, según se describe en la secciónActivación del procesamiento en paralelode este artículo.


Creación del índice paralelo

DB2 para i puede usar el procesamiento en paralelo para la creación de índices SQL y archivos lógicos con clave (es decir, el comando CRTLF). El procesamiento de índices en paralelo se logra fragmentando de manera lógica la tabla subyacente en múltiples segmentos de datos. Luego cada proceso construye los valores de clave de índices para el segmento de la tabla asignado. El trabajo efectuado por cada proceso en paralelo luego se fusiona hasta completar la estructura final del índice.

La Figura 1 muestra que el uso de recursos de CPU adicionales puede reducir sustancialmente la cantidad de tiempo que lleva crear un índice. Esta capacidad es muy importante para un entorno de base de datos de gran envergadura o en un escenario de recuperación que permita volver a crear los índices y hacerlo rápidamente.

Figura 1. Los tiempos de construcción de índices mejoran mucho mediante la activación del paralelismo
Index build times are greatly improved with parallelism enabled

Actualización de índices en paralelo

La actualización de índices es la tarea que permite cambiar la clave del índice para que refleje los cambios (normalmente se realiza medianteinsert,update, odelete) en la fila de la base de datos asociada. Si se cambia el número de orden de un cliente o si se agrega un orden nuevo para el cliente en la base de datos, se deben actualizar todos los índices que incluyan la columna de número de orden como campo de clave. La actualización o el mantenimiento de los factores de los índices influyen en el tiempo general de las transacciones asociado con el agregado o el cambio de un orden.

Si el cambio de fila en la base de datos afecta a más de un índice, la actualización de dichos índices se realiza serialmente, de manera predeterminada, un índice por vez. Primero, el cambio de número de orden se propaga a IndexA. Una vez que se completa el cambio en IndexA, el número de orden se propaga a IndexB, y así sucesivamente.

La actualización de índice en paralelo implica actualizar varios índices simultáneamente. Los cambios de número de orden para un cliente se pueden propagar a IndexA e IndexB simultáneamente. Este procesamiento de actualización de índices simultáneo reduce el tiempo total que lleva hacer un cambio de número de orden en toda la base de datos. La actualización de índices en paralelo maneja recursos por tiempo, aumentando la velocidad de E/S de una determinada aplicación o transacción.

La Figura 2 muestra el ahorro de tiempo que se puede lograr mediante la actualización de múltiples índices en paralelo. En la Figura 2, se cargan filas nuevas a una tabla con múltiples índices, y la actualización de índices en paralelo mejora dos o tres veces el tiempo de carga.

Figura 2. El tiempo de carga mejora cuando se realiza la actualización de índices en paralelo
Load time improves when index maintenance occurs in parallel

Asumiendo que se haya instalado y activado la característica DB2 SMP, DB2 para i sólo usa la actualización de índices en paralelo cuando la aplicación está:

  • Realizando inserciones bloqueadas (o escrituras) de ocho o más filas.
  • Insertando en una tabla que tenga dos o más índices definidos en ella.
  • Insertando en una tabla que no reutilice las filas eliminadas (como REUSEDLT(*NO)). Este requisito se puedeanulartemporalmente.

Las inserciones bloqueadas se encuentran comúnmente en los procesos de carga en almacén de datos y actualización en lote, por lo tanto la actualización de índices en paralelo produce el mayor impacto de rendimiento en estos entornos.

Sugerencia:Si un proceso de carga está agregando más del 20% en filas nuevas a una tabla, se recomienda por lo general eliminar los índices antes de la carga y luego usar procesamiento en paralelo para reconstruir los índices después de haberse completado el proceso de carga.

Anulación del requisito de reutilización de filas eliminadas

Cuando una tabla está reutilizando filas eliminadas, DB2 no puede efectuar un bloqueo a nivel filas, a nivel motor de la base de datos, porque DB2 debe extraer las filas individuales de la inserción bloqueada de manera tal que cada inserción individual se pueda ubicar en el lugar de la fila eliminada. Por ello, la falta de inserciones bloqueadas, a nivel motor de la base de datos, impide que se use la actualización de índices en paralelo.

La actualización de índices en paralelo se puede habilitar desactivando la función de reutilizar filas eliminadas para una tabla. Sin embargo, desactivar la reutilización de filas eliminadas puede producir un impacto negativo porque los usuarios tal vez deban reorganizar frecuentemente sus tablas DB2 para recuperar el espacio de almacenamiento para las filas eliminadas. Efectivamente, DB2 para i crea todas las tablas SQL con la función reutilizar filas eliminadas para eliminar virtualmente el requisito de reorganizar tablas.

A raíz de esto, DB2 ofrece una nueva opción de comando Override Database File (Anular archivo de base de datos – OVRDBF) en la versión 7.1 para ofrecer la capacidad de inhabilitar temporalmente el bloqueo a nivel fila de DB2 y la actualización de índices en paralelo para las tablas definidas con el atributo Reuse Deleted (Reutilizar eliminado) configurado en *YES. Al especificar un valor de parámetro REUSEDLT(*NO) en el comando Override (Anular), la tarea que solicita la inhabilitación hará que DB2 trate a la tabla como si hubiera sido creada con REUSEDLT(*NO). Se pueden modificar la tareas en lote para invocar a esta inhabilitación con el fin de acelerar su rendimiento porque REUSEDLT(*NO) permitirá que se beneficie el proceso en lote a través del bloqueo a nivel fila de DB2 y al actualización de índices en paralelo (asumiendo que se haya instalado DB2 SMP). Todas las otras tareas que accedan a la misma tabla, respetarán la configuración permanente de reutilizar filas eliminadas en *YES.

Para obtener beneficios en el rendimiento de esta nueva opción de anulación en las versiones IBM i 5.4 y 6.1, puede comprar un recurso a través de la organización IBM Lab Services (verRecursospara consultar información de contacto).


Activación del procesamiento en paralelo

Después de instalada la característica DB2 SMP, hay distintas formas de activar el procesamiento en paralelo para construir y actualizar índices en paralelo.

A nivel sistema

De manera predeterminada, la cantidad de procesamiento en paralelo es controlada a nivel de todo el sistema, usando el valor de sistemaQQRYDEGREE. Si el valor de sistema se configura en otra opción diferente a*NONEo*IO, DB2 para i usará el procesamiento en paralelo cuando actualice y construya índices. Se pueden usar los comandosCHGSYSVAL(Cambiar valor de sistema) para cambiar la configuración del valor de sistema QQRYDEGREE. A continuación se describen los valores que puede especificar para habilitar el procesamiento en paralelo:

  • *MAX- El motor DB2 para i puede usar todos los procesadores de CPU y toda la memoria disponible para la tarea (conexión) durante la construcción y actualización de índices en paralelo.
  • *OPTIMIZE- Una configuraciónmuy útil. El motor DB2 usa el recurso compartido de tareas de los procesadores de CPU y de memoria.
  • *IO- El optimizador de consultas puede optar por usar cualquier grado de paralelismo para efectuar el procesamiento de E/S.
  • *NONE- Este es el valor predeterminado. No se usará el procesamiento en paralelo para el procesamiento de índices.

A nivel tarea o conexión

Si desea restringir el procesamiento en paralelo a una tarea o conexión individual, use una de las siguientes interfaces para anular la configuración del valor de sistema:

Interfaz CHGQRYA

El parámetro DEGREE en el comando CHGQRYA CL acepta los mismos valores que el valor de sistema. Además, el parámetro DEGREE también soporta el valor de*NBRTASKSnen donde “n” puede ser cualquier valor numérico entre 2 y 9999. Este valor configura la cantidad máxima de procesadores de CPU que puede usar el motor DB2. Se recomienda no usar esta configuración en paralelo (DEGREE).

Si en una tarea se ejecuta el comando CHGQRYA que aparece en el Listado 1, el grado de paralelismo sólo se configura en*MAXpara la tarea, independientemente del valor de sistema.

Listado 1. Comando CHGQRYA
CHGQRYA DEGREE(*MAX)

Este comando se puede emitir varias veces en una misma tarea para activar y desactivar el paralelismo.

QAQQINI interface

El archivoQAQQINItambién le permite especificar el procesamiento en paralelo para una tarea o conexión individual. Como los archivos.INIque se encuentran en su computadora y se usan para almacenar los valores de la configuración que controlan el comportamiento de las herramientas y aplicaciones de la computadora (colores, tamaño de ventana, etc.), se puede usar el archivoQAQQINIpara influenciar el comportamiento del motor de base de datos, incluso el comportamiento del procesamiento en paralelo. Estos valores de configuraciónQAQQINIse pueden guardar y aplicar de manera dinámica en múltiples solicitudes de bases de datos.

El hecho de que el archivoQAQQINIsea sólo una tabla de base de datos normal significa que usted puede cambiar de manera dinámica los valores de diferentes atributos a medida que cambia su entorno. La tabla también es muy flexible porque se pueden usar interfaces de base de datos normales para cambiar los valores de un atributoQAQQINI. El Listado 2 muestra cómo usar el archivoQAQQINIpara configurar el grado de procesamiento en paralelo en*OPTIMIZE.

Listado 2. Comando QAQQINI
UPDATE MyLib.QAQQINI SET QQVAL = '*OPTIMIZE' WHERE
                QQPARM='PARALLEL_DEGREE'

El atributoPARALLEL_DEGREEsoporta un superconjunto de los valores de paralelismo soportados por el sistema QQRYDEGREE y el comando CHGQRYA. Además de los valores de grado de paralelismo soportados por esas interfaces, el atributoPARALLEL_DEGREEsoporta los siguientes valores:

  • *MAXp- El optimizador efectúa el cálculo de grado de paralelismo normal para la configuración*MAX. Después que finaliza ese cálculo de grado de paralelismo, el valor del grado de paralelismo aumenta o disminuye usando el valor de porcentaje asignado enp. El valor deppuede ser de 1 a 200. Cualquier valor inferior a 100 disminuye el grado de paralelismo usado en la solicitud de base de datos, y cualquier valor superior a 100 puede aumentar el grado de paralelismo. Por ejemplo, un valor de*MAX50reducirá el grado de paralelismo a la mitad, y un valor de*MAX200duplicará la configuración del grado de paralelismo.
  • *OPTIMIZEp- Este valor hace que el optimizador se comporte de manera similar a la configuración*MAXp. La diferencia radica en que el porcentaje se aplica al cálculo de grado de paralelismo para la configuración*OPTIMIZE.

No hay límite para la cantidad de veces que se puede cambiar un valor de atributoQAQQINIdurante una tarea o conexión, por lo tanto es fácil usar el procesamiento en paralelo para algunas operaciones DB2 y desactivarlo para otras operaciones DB2 usando la interfaz. Ver la secciónRecursospara obtener más información sobre creación y uso del archivoQAQQINI.

Interfaz SET CURRENT DEGREE

La instrucción SET CURRENT DEGREE (Establecer grado actual) brinda una interfaz SQL directa para cambiar el valor de paralelismo. El Listado 3 muestra que la sintaxis de la instrucción SQL es bastante simple.

Listado 3. Valor SET CURRENT DEGREE
SET CURRENT DEGREE = MAX

Los valores de grado de paralelismo que soporta la interfaz SQL difieren levemente a los de otras interfaces. A continuación se incluye una lista de los valores de grado de paralelismo soportados por la interfazSET CURRENT DEGREE:

  • MAX- Equivalente a la configuración de grado de paralelismo *MAX
  • ANY- Equivalente a la configuración de grado de paralelismo *OPTIMIZE
  • IO- Equivalente a la configuración de grado de paralelismo *IO
  • n- Equivalente a la configuración *NBRTASKSn, cuando el valor denes igual o superior a 2
  • NONEo1- Equivalente a la configuración de grado de paralelismo *NONE

Conclusión

Este artículo muestra el valor del procesamiento en paralelo suministrado por la característica DB2 SMP para cargas de trabajo no referidas a consultas. Para habilitar el procesamiento de índices en paralelo, active el procesamiento en paralelo usando una de las interfaces que se describen en este artículo antes de construir índices, cargar datos o efectuar procesamiento en lote. Al hacer esto, puede aprovechar mejor los recursos de CPU en un servidor con múltiples CPU y acelerar el funcionamiento.

Recursos

Aprender

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt
ArticleID=966305
ArticleTitle=Procesamiento de índices en paralelo en DB2 para i
publish-date=08192010