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

Descrição

Ambiente
Adobe Campaign Adobe Campaign Classic

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

O âmbito deste artigo é abordar um problema específico relacionado com:

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

Causa

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

Agora, é necessário adicionar uma coluna extra a essa tabela, que é do tipo de dados Integer.

Em seguida, adicione essa coluna à definição do schema e desejar confirmar as alterações no banco de dados.


Ao atualizar o banco de dados, o banco de dados encontra um impasse 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

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 icolumn_name SET NOT NULL;

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

A solução é condensar esses 4 comandos em um e ainda fazer as mesmas alterações que 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 e definindo NOT NULLe também definir o valor dos registros existentes como 0 devido ao NOT NULL restrição.

OBSERVAÇÃO:

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 garante uma operação suave, pois a instrução atualiza todos os existente para 0 além disso, e dependendo do número de registros, isso pode levar tempo.

Nesta página