Einfügen grosser Datenmengen

31/05/2010 - 08:30 von Andreas Schädler | Report spam
Hallo NG

Wir fügen über ein VB.Net Programm mit BulkInsert tàglich 200'000 Records in
eine Tabelle ein (SQLServer 2008). Inzwischen hat die Tabelle 81 Mio Records.
Auf der Tabelle sind zwei Indexe für die Selects definiert.

Der BulkInsert dauert jeweils ca. 1Sek, dafür müssen wir aber die zwei
Indexe deaktivieren (ALTER INDEX name ON tabelle DESABLE), sonst dauert es
Stunden. Nach dem Insert aktivieren wir die Indexe wieder (ALTER INDEX ALL ON
tabelle REBUILD) was inzwischen ca. 10 Min dauert.

Gibt es eine andere Möglichkeit bzw. einen anderen Weg, um die 10 Min des
REBULD auf unter eine Min. zu kriegen? Da die Tabelle schnell wàchst fürchten
wir, dass der REBULD bald sehr lang dauern wird.

Vielen Dank und Gruss
Andreas
 

Lesen sie die antworten

#1 Frank Kalis
31/05/2010 - 09:09 | Warnen spam
On 31 Mai, 08:30, Andreas Schàdler
wrote:

Wir fügen über ein VB.Net Programm mit BulkInsert tàglich 200'000 Records in
eine Tabelle ein (SQLServer 2008). Inzwischen hat die Tabelle 81 Mio Records.
Auf der Tabelle sind zwei Indexe für die Selects definiert.

Der BulkInsert dauert jeweils ca. 1Sek, dafür müssen wir aber die zwei
Indexe deaktivieren (ALTER INDEX name ON tabelle DESABLE), sonst dauert es
Stunden. Nach dem Insert aktivieren wir die Indexe wieder (ALTER INDEX ALL ON
tabelle REBUILD) was inzwischen ca. 10 Min dauert.

Gibt es eine andere Möglichkeit bzw. einen anderen Weg, um die 10 Min des
REBULD auf unter eine Min. zu kriegen? Da die Tabelle schnell wàchst fürchten
wir, dass der REBULD bald sehr lang dauern wird.




Du packst das Problem meiner Meinung nach falsch an. Ich lade jeden
Tag zwischen 5 - 6 Millionen Zeilen in eine Tabelle. Davon lösche ich
zwar nach 8 Tagen ca. 80% wieder, aber die Tabelle enthàlt immer noch
+250 Millionen Zeilen. Wir sind gerade dabei den Import Mechanismus
etwas umzustellen, aber erste Tests haben gezeigt, dass wir fast
20.000 Zeilen pro Sekunde in die Live Tabelle laden können. Um die
Indizes ( 1 Clustered Index, 1 Non-clustered Primary Key, 1 Composite
Unique Non-clustered index) kümmere ich mich bei Bedarf entweder
abends oder am Wochenende. Und das alles passiert auf "alter"
moderater 32-bit Hardware mit SQL Server 2005.

Ich würde mir die Tabellenstrukturen und vor allem die vorhandenen
Indizes sehr genau anschauen. "Stunden" fürs Einfügen von gerade mal
200.000 Zeilen ist eine làcherlich lange Zeit. Da liegt etwas ganz
gewaltig im Argen, was Du mit Deiner Index Lösung nur umgehst, aber
nicht löst.
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org

Ähnliche fragen