Optimiser la requête SQL générée dans l'assistant de mise à jour de la base de données

Dernière mise à jour : 2022-11-15

Description

Environnement
Adobe Campaign Adobe Campaign Classic

Problème
Dans la plupart des builds Adobe Campaign, y compris les builds Gold Standard 9032, vous pouvez rencontrer plusieurs problèmes lors de l’ajout de nouvelles colonnes à un schéma existant.

Le présent article a pour but de résoudre un problème spécifique qui a trait aux éléments suivants :

  • Ajouter un champ entier à un schéma existant lorsque des enregistrements existent déjà.
  • Optimisez la requête SQL générée par l'application pour une requête efficace pour Postgres SQL.

Cause

Cela peut se produire lorsque, par exemple, vous disposez d’une table de destinataires existante ou de toute autre table qui contient déjà plus d’un million d’enregistrements.

Si vous devez maintenant ajouter une colonne supplémentaire à la table de type données Integer.

Vous ajoutez ensuite cette colonne dans la définition de schéma et souhaitez valider les modifications dans la base de données.


Lors de la mise à jour de la base de données, celle-ci se trouve dans un blocage ou la requête bloque d’autres opérations.

Cela est principalement dû à la mise à jour de tous les enregistrements vers 0 à partir de la commande SQL générée par l'assistant de base de données.

Résolution

Solution
Lors de l’ajout d’une colonne entière, l’instruction SQL générée est la suivante :

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;

Le problème ici est qu'il existe 4 commandes exécutées en parallèle dans la base de données, ce qui peut entraîner des problèmes de performances ou un blocage.

La solution consiste à condenser ces 4 commandes en une seule et même effectuer les mêmes modifications que ci-dessous :

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

Il effectue toutes les modifications requises, en ajoutant la colonne, en définissant la valeur par défaut, en définissant NOT NULL, ainsi que de définir la valeur des enregistrements existants sur 0 en raison de NOT NULL contrainte.

REMARQUE:

Si plusieurs colonnes entières doivent être ajoutées, ajoutez-les une par une et exécutez l’assistant de base de données pour chaque modification.

Cela permet d’assurer le bon fonctionnement puisque l’instruction met à jour toutes les existant enregistrements vers 0 et selon le nombre d'enregistrements, cela peut prendre du temps.

Sur cette page