Optimizar consulta SQL generada en el asistente de actualización de base de datos

Descripción description

Entorno
Adobe Campaign Adobe Campaign Classic

Problema
En la mayoría de las compilaciones de Adobe Campaign, incluidas las de Gold Standard 9032, es posible que se encuentren varios problemas al agregar nuevas columnas a un esquema existente.

El ámbito de este artículo es abordar un problema específico relacionado con:

  • Añadir un campo entero a un esquema existente cuando ya existen registros.
  • Optimice la consulta SQL generada por la aplicación a una consulta eficaz para SQL Postgres.

Causa

Esto puede suceder cuando, por ejemplo, tiene una tabla de destinatarios existente o cualquier otra tabla que ya tenga más de 1 millón de registros.

Si ahora necesita agregar una columna adicional a esa tabla que sea del tipo de datos Integer.

A continuación, agregue esa columna en la definición del esquema y desee confirmar los cambios en la base de datos.

Al actualizar la base de datos, la base de datos encuentra un interbloqueo o la consulta bloquea otras operaciones.

Esto se debe principalmente a la actualización de todos los registros a 0 basado en el comando SQL generado por el asistente de base de datos.

Resolución resolution

Solución
Al añadir una columna entera, se obtiene la instrucción SQL generada similar a esta:

ALTER TABLE NmsRecipient ADD column_name SMALLINT;
UPDATE NmsRecipient SET column_name = 0;
ALTER TABLE NmsRecipient ALTER COLUMN column_name SET Default 0;
ALTER TABLE NmsRecipient ALTER COLUMN icolumn_name SET NOT NULL;

El problema aquí es que hay 4 comandos ejecutados en la base de datos en paralelo que pueden causar problemas de rendimiento o un bloqueo.

La solución es condensar estos 4 comandos en uno y hacer los mismos cambios como se muestra a continuación:

ALTER TABLE NmsRecipient ADD iFichierLiveDataCliqueurs SMALLINT NOT NULL SET Default 0 ;

Realiza todos los cambios necesarios, agrega la columna, configura el valor predeterminado y establece NOT NULLy también estableciendo el valor de los registros existentes en 0 debido al NOT NULL restricción.

NOTA:

Si es necesario agregar varias columnas enteras, agréguelas una por una y ejecute el asistente de base de datos para cada cambio.

Esto sirve para garantizar un funcionamiento sin problemas, ya que la instrucción actualiza todas las  existente  registros para 0 además, y según el número de registros, puede llevar tiempo.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f