Otimizar consulta SQL gerada no assistente de atualização de banco de dados

Descrição description

Ambiente
Adobe Campaign Adobe Campaign Classic

Problema
Na maioria das builds do Adobe Campaign, incluindo as do Gold Standard 9032, você pode encontrar vários problemas ao adicionar novas colunas a um esquema existente.

O escopo deste artigo é abordar um problema específico relacionado a:

  • Adição de um campo inteiro a um esquema existente quando os registros já existem.
  • Otimize a query SQL gerada pelo aplicativo para uma eficiente para SQL Postgres.

Causa

Isso pode acontecer quando você, por exemplo, tem uma tabela de recipient existente ou qualquer outra tabela que já tem mais de 1 milhão de registros.

Se, agora, você precisar adicionar uma coluna extra a essa tabela, que é do tipo de dados Integer.

Em seguida, você adiciona essa coluna na definição do esquema e deseja confirmar as alterações no banco de dados.

Ao atualizar o banco de dados, o banco de dados encontra um deadlock ou o query bloqueia outras operações.

Isso se deve principalmente à atualização de todos os registros para 0 com base no comando SQL gerado pelo assistente de banco de dados.

Resolução resolution

Solução
Ao adicionar uma coluna inteira, você obtém a instrução SQL gerada semelhante 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;

O problema aqui é que há 4 comandos executados em paralelo no banco de dados que podem causar problemas de desempenho ou um deadlock.

A solução é condensar esses 4 comandos em um e ainda fazer as mesmas alterações conforme abaixo:

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

Ele faz todas as alterações necessárias, adicionando a coluna, definindo o padrão, definir NOT NULLe também definindo o valor dos registros existentes como 0 devido à NOT NULL restrição.

NOTA:

Se houver várias colunas inteiras que precisam ser adicionadas, adicione-as uma por uma e execute o assistente de banco de dados para cada alteração.

Isso é para garantir uma operação suave, pois a instrução atualiza todas  existente  registros para 0 além disso, e dependendo do número de registros, pode levar tempo.

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