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

Este artículo aborda el problema de añadir un campo entero a un esquema existente en Adobe Campaign, especialmente cuando ya existen registros. Para resolver esto, optimice la consulta SQL condensando los cuatro comandos (como se describe en este artículo) en uno. Esto debería garantizar un funcionamiento eficaz sin problemas de rendimiento ni interbloqueos.

Descripción description

Entorno

  • Adobe Campaign
  • Adobe Campaign Classic

Problema/Síntomas

En la mayoría de las compilaciones de Adobe Campaign, incluidas las de Gold Standard 9032, puede encontrar varios problemas al agregar nuevas columnas a un esquema existente.

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

  • Agregar un campo entero a un esquema existente cuando ya existen registros.
  • Optimizar la consulta SQL generada por la aplicación para una eficiente para Postgres SQL.

Resolución resolution

Al agregar una columna entera, obtiene la instrucción SQL generada de forma 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 i<column_name> SET NOT NULL;

El problema aquí es que hay cuatro comandos ejecutados en la base de datos en paralelo, lo que puede causar problemas de rendimiento o un bloqueo.
La solución consiste en condensar estos cuatro comandos en uno y seguir realizando los mismos cambios que se indican a continuación:

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

Realiza todos los cambios necesarios, agregando la columna, estableciendo el valor predeterminado, estableciendo NOT NULL, y también estableciendo el valor de los registros existentes en 0 debido a la restricción NOT NULL.

NOTA:

Si hay varias columnas de enteros que es necesario agregar, agréguelas una por una y ejecute el asistente de bases de datos para cada cambio.

Esto sirve para garantizar un funcionamiento sin problemas, ya que la instrucción también actualiza todos los registros existentes de a 0, lo que puede llevar tiempo en función del número de registros.

Causa

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

Si ahora necesita agregar una columna adicional a esa tabla, que es del tipo de datos entero. En ese caso, agrega esa columna en la definición del esquema y desea confirmar los cambios en la base de datos.

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

Esto se debe principalmente a la actualización de todos los registros a 0 según el comando SQL generado por el asistente de bases de datos.

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