Der Prozess scheint zu hängen, da er zwar alle Daten an SQL Server gesendet hat, die Daten jedoch nur in Sortierpuffern abgelegt wurden - er hat die Zieltabelle noch nicht erreicht.
Wenn die Tabelle Indizes enthält, sortiert SQL Server die Daten vor dem Einfügen in die erforderliche Indexreihenfolge. Wenn der Datensatz groß ist, viele Indizes vorhanden sind oder in SQL Server nicht genügend Sortierspeicher verfügbar ist, kann dieser Vorgang viel Zeit in Anspruch nehmen. Das Vorhandensein von Indizes und vorhandenen Tabellendaten kann sich auch auf die Fähigkeit von SQL Server auswirken, optimierte, minimal protokollierte Einfügungen zu verwenden.
Ohne minimal protokollierte Einfügungen ist der Einfügevorgang (nach dem Sortieren) ebenfalls langsam, da jede Zeile vollständig im Transaktionsprotokoll aufgezeichnet ist (einschließlich der Informationen, die zum Rückgängigmachen der Einfügung erforderlich sind, um die Wiederherstellbarkeit sicherzustellen).
Es können mehrere bcp-Optionen angegeben werden, um minimal protokollierte Einfügungen zu erzielen. Möglicherweise sind auch andere Maßnahmen erforderlich, z. B. das vorübergehende Ändern des Wiederherstellungsmodells der Datenbank, um effiziente Massenvorgänge zu unterstützen. Oft ist es auch die optimale Strategie, nicht gruppierte Indizes vor dem Einfügen zu löschen und anschließend neu zu erstellen.
Um die Hauptpunkte eines komplexen Themas zusammenzufassen:
- Verwenden Sie ein Wiederherstellungsmodell, das minimal protokollierte Einfügungen unterstützt
- Geben Sie einen
TABLOCK
Hinweis an (die genaue Syntax variiert je nach Einfügemethode).
- Geben Sie den
ORDER
Hinweis an und stellen Sie sicher, dass die Datenquelle nach dem Clustering-Schlüssel vorsortiert ist
- Deaktivieren Sie Trigger und Einschränkungen
- Wenn möglich in eine leere Tabelle laden
Weitere Informationen finden Sie unter:
Optimieren der Leistung von Masseneinfügungen und verknüpften Seiten
Für SQL Server 2008 und höher:
Das Handbuch zum Laden von Daten