ich nicht diese Art der Verarbeitung in SQL Server getan haben, so bin ich nicht sicher, ob Der Ratschlag gilt vollständig, aber ich bin zuversichtlich genug, um Ihnen vorzuschlagen, es zu versuchen.
Was ich normalerweise in Oracle tue, ist die vollständige Vermeidung von Aktualisierungen bei der Verarbeitung aller Zeilen in einer Situation wie der von Ihnen beschriebenen (Einzelbenutzer, Batch-Ereignis).
Entweder ich migrieren die Logik von der Update-Anweisung zurück zu der Anweisung, die die Zeilen eingefügt. Oder wenn dies nicht möglich ist, erstelle ich eine neue Tabelle und lege die Aktualisierungslogik in die Auswahlliste. Zum Beispiel, statt
UPDATE [dbo].[stage_table]
SET [column2] = SUBSTRING([column1], 1, CHARINDEX('.', [column1])-1);
tun würde ich tun:
create table stage_table2 as
select column1
,substring(column1, 1, charindex('.', column1)-1) as column2
,column3
,column4
from stage_table;
drop table stage_table;
alter table stage_table2 rename to stage_table;
-- re-create indexes and constraints, optionally gather statistics
ich auch dieses mit paralleler Abfrage tun könnte und NOLOGGING Option sehr wenig Redo zu generieren und nicht rückgängig gemacht wird überhaupt, die eine würde übertreffen Update-Statement mit solch einem großen Rand ist es nicht einmal lustig :) Natürlich ist dies wegen Oracle Interna, aber ich denke, es wäre möglich, es mit SQL Server replizieren. Es gibt etwas in Ihrer Beschreibung, das dies jedoch zu einem weniger effizienten Ansatz machen kann. Sie hatten einige sehr große Textspalten, die Sie in der CTAS-Anweisung "mitziehen" müssten.
Auch müssen Sie Ihre Hardware-Setup untersuchen, weil es nicht geeignet ist, mit der Menge der Daten zu arbeiten, die Sie geworfen haben. Entweder es ist etwas falsch mit der Konfiguration, oder Sie haben eine Menge anderer Aktivitäten los:
kann ich sehen, dass es konstant ist Rate von 5 MB/s Lese- und Schreibgeschwindigkeit von 10 MB/s zu. MDF-Datei.
Ich kann das auf meinen Freundinnen 2 Jahre alten Laptop schlagen. Bei einer Lesegeschwindigkeit von 5 mb/s und einer Tabelle von 150 GB würde es 8,5 Stunden dauern, um nur einmal durch die Tabelle zu scannen. Dies setzt voraus, dass die Datenbank 0% Overhead hinzufügt, was nicht der Fall ist.
Sind die Update-Spalten indiziert? – IamIC