Wir haben eine Anwendung, die große Anzahl von Änderungen in einer Tabelle (Tabelle 1) in einer SQL Server 2000-Datenbank veröffentlicht.Mass Updates für SQL Server 2008-Datenbank mit. NET-Anwendung - die performanteste Methode
Jedes Insert/Update/Löschen von Bränden einen Trigger auf der Tabelle, und bucht die Details der Änderung in einer anderen Tabelle (Tabelle 2), einschließlich dem eindeutigen Schlüssel der Tabelle 1.
Dann in bestimmten Abständen ein. Die Net-Anwendung fragt Tabelle 2 ab, um festzustellen, ob Aktualisierungen an eine identische Tabelle in Tabelle 1 in einer SQL Server 2008-Datenbank übertragen werden müssen - Tabelle 3. Die Routine nimmt die "Top 10000" -Reihen von Änderungen und wendet sie an einzeln zu Tabelle 3, Wiederholen des Prozesses, bis keine übrig sind. Jeder 10.000 benötigt ungefähr eine Minute, um zu verarbeiten, einschließlich der Massenaktualisierung von Tabelle 2, um die Übertragung von vervollständigten Daten anzuzeigen.
Jede Aktualisierung von Tabelle 3 wird mit dem eindeutigen Schlüssel durchgeführt, und die Indexierung auf der Tabelle ist solide.
Sobald die Aktualisierung in Tabelle 3 abgeschlossen ist, wird Tabelle 2 aktualisiert, um anzuzeigen, dass die Transaktion auf die SQL Server 2008-Datenbank angewendet wurde.
Tabelle 1 wird manchmal mit 40.000 Updates angezeigt, diese scheinen gut zu funktionieren, aber die SQl Server 2008-Datenbank leidet, wenn die Datensätze dort aktualisiert werden.
Was ist der leistungsfähigste Weg, um die Updates in Tabelle 3 zu veröffentlichen?
Ich obwohl Service-Broker kann den Job erledigen, aber wie erstelle ich die XML-Nachricht in der .Net-App und lassen Sie sie in der Warteschlange für Service-Broker zutreffen - und würde es nicht die gleichen Probleme trotzdem verursachen - gleiche Arbeit in einem anderen Prozess.
Haben Sie sich die Replikation angesehen oder sogar einen SQL-Job gemacht? –
Paul, ich wollte diesen Job erst mit T-SQL abschließen, als er auf den Markt kam. Da ich sowohl SQL 2000- als auch SQL 2008-Datenbanken verwendete, fand ich heraus, dass es nichts gab, was die Arbeit akzeptabel machen würde. Ich habe über OpenQuery nachgedacht, aber das schien auch nicht zu funktionieren. Wenn du einen Vorschlag hast, dass du weißt, dass es funktionieren wird - ich bin ganz Ohr! –
Sie haben wahrscheinlich alles versucht, was ich vorschlagen konnte, aber manchmal ist eine SQL-Antwort für Entwickler nicht immer offensichtlich. Wenn es möglich gewesen wäre, hätte ich versucht, die Server zu verbinden und all die schwere Arbeit im SQL 2008-Server zu erledigen, aber ich würde es wahrscheinlich wieder zu sehr vereinfachen. –