Im Datenbankaktualisierungs-Assistenten generierte SQL-Abfrage optimieren

Dieser Artikel behandelt das Problem des Hinzufügens eines ganzzahligen Felds zu einem vorhandenen Schema in Adobe Campaign, insbesondere wenn bereits Datensätze vorhanden sind. Um dies zu beheben, optimieren Sie die SQL-Abfrage, indem Sie die vier Befehle (wie in diesem Artikel erläutert) zu einem zusammenfassen. Dies sollte einen effizienten Betrieb ohne Leistungsprobleme oder Deadlocks gewährleisten.

Beschreibung description

Umgebung

  • Adobe Campaign
  • Adobe Campaign Classic

Problem/Symptome

In den meisten Adobe Campaign-Builds, einschließlich der Gold Standard 9032-Builds, können beim Hinzufügen neuer Spalten zu einem vorhandenen Schema mehrere Probleme auftreten.

In diesem Artikel soll ein spezifisches Problem behandelt werden, das mit Folgendem zusammenhängt:

  • Hinzufügen eines ganzzahligen Felds zu einem vorhandenen Schema, wenn bereits Datensätze vorhanden sind.
  • Optimieren Sie die von der Anwendung generierte SQL-Abfrage, um eine effiziente Abfrage für Postgres SQL zu erstellen.

Auflösung resolution

Beim Hinzufügen einer ganzzahligen Spalte wird die SQL-Anweisung wie folgt generiert:

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;

Das Problem besteht darin, dass in der Datenbank parallel vier Befehle ausgeführt werden, was zu Leistungsproblemen oder einem Deadlock führen kann.
Die Lösung besteht darin, diese vier Befehle zu einem zusammenzufassen und dennoch die gleichen Änderungen wie unten beschrieben vorzunehmen:

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

Er nimmt alle erforderlichen Änderungen vor, indem er die Spalte hinzufügt, den Standardwert festlegt, NOT NULL festlegt und auch den Wert vorhandener Datensätze aufgrund der NOT NULL auf 0 festlegt.

HINWEIS:

Wenn mehrere ganzzahlige Spalten hinzugefügt werden müssen, fügen Sie sie einzeln hinzu und führen Sie den Datenbank-Assistenten für jede Änderung aus.

Dadurch soll ein reibungsloser Ablauf gewährleistet werden, da die Anweisung auch alle vorhandenen Datensätze auf 0 aktualisiert, was je nach Anzahl der Datensätze einige Zeit in Anspruch nehmen kann.

Ursache

Dies kann vorkommen, wenn Sie beispielsweise über eine vorhandene Empfängertabelle oder eine andere Tabelle verfügen, die bereits über mehr als eine Million Datensätze verfügt.

Wenn Sie dieser Tabelle nun eine zusätzliche Spalte vom Datentyp Ganzzahl hinzufügen müssen. In diesem Fall fügen Sie diese Spalte in die Schemadefinition ein und möchten die Änderungen in der Datenbank übernehmen.

Beim Aktualisieren der Datenbank kommt es zu einem Deadlock der Datenbank, oder die Abfrage blockiert andere Vorgänge.

Dies ist hauptsächlich auf die Aktualisierung aller Datensätze auf 0 zurückzuführen, die auf dem vom Datenbankassistenten generierten SQL-Befehl basiert.

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