Ich habe sucht ein Tisch wie:Aktualisieren von Spalten in derselben Tabelle mit parallel laufenden Stored Procedures
Key Customer Attr1 Attr2 Attr3 Attr4 Attr5 ... Attr70
123 Smith NULL NULL NULL NULL NULL ... NULL
456 Wesson NULL NULL NULL NULL NULL ... NULL
....
Diese Tabelle einige (ca. 3) Millionen von Zeilen.
Jedes Attribut verfügt über eine eigene gespeicherte Prozedur mit einer Berechnungslogik zum Füllen dieser Spalte.
Derzeit diese gespeicherten Prozeduren ausgeführt werden serielle und eine ganze Weile dauern. Sie sind ausgeführt wie: EXEC dbo.fill_Attr1 @Customer = 'Smith'
ich diese gespeicherten Prozeduren hatte laufen parallel (gestartet von einem Job-Scheduling-Tool), aber leider hin und wieder DEADLOCKS
passiert ist.
Was ist die beste Praxis alle (oder zumindest einige) dieser SPs parallel zu machen?
Ich dachte darüber nach WITH (NOLOCK)
hinzuzufügen - was ich lese ist keine gute Praxis.
Da dies jedoch in einem Batch-Prozess geschieht, konnte ich garantieren, dass kein anderer Prozess Daten ändert oder Daten einfügt, während diese SPs laufen.
Zusätzliche Informationen, um die Frage klarer zu machen.
Derzeit diese SPs laufen Serien wie:
EXEC dbo.fill_Attr1 @Customer = 'Smith'
EXEC dbo.fill_Attr1 @Customer = 'Wesson'
EXEC dbo.fill_Attr2 @Customer = 'Smith'
EXEC dbo.fill_Attr2 @Customer = 'Wesson'
EXEC dbo.fill_Attr3 @Customer = 'Smith'
EXEC dbo.fill_Attr3 @Customer = 'Wesson'
Jede gespeicherte Prozedur aktualisiert immer alle Aufzeichnungen eines Kunden.
Abhängig von der Logik, wie das Attribut berechnet wird, kann dies in einem einzelnen Update oder - falls komplexere Logik - in mehreren Aktualisierungen innerhalb der gespeicherten Prozedur erfolgen.
Gibt es eine bessere Idee, wie man es löst?
Vielen Dank im Voraus
Stefan
ich nicht bekommen, wie es funktioniert: EXEC dbo.fill_Attr1 @Customer = ‚Smith‘, die Pflege von attr1 für Smith nimmt, und das ist es. Also dauert es 70 * 3.000.000 oder 210.000.000 Aufrufe, um die Tabelle zu aktualisieren? –
Können Sie die Logik so ändern, dass nur eine Prozedur verwendet wird und die Aktualisierung für alle Spalten auf einmal angewendet wird? –
@LeeEverest: Nein, für jedes Attribut gibt es eine gespeicherte Prozedur. Insgesamt gibt es 70 SPs –