Abhängig von Ihrer Zeilengröße, Tabellengröße, Indizes usw. habe ich gesehen, wie SQL Server 2000 einige Stunden (4 bis 5 Stunden) abgeschwächt wurde, bevor es ENDLICH abgeschlossen wurde.
Das Schlimmste, was Sie jetzt tun können, ist "Panik" und das Ding hart zu töten. Lass es sich selbst auslaufen.
In Zukunft möchten Sie möglicherweise versuchen, das zu tun, was Farseeker erwähnt hat, eine zweite (leere) Struktur erstellen und Ihre Datensätze auf diese Weise kopieren.
- Je länger die Tabellenzeile ist, desto länger dauert es.
- Je mehr Indizes Sie für diese Tabelle haben, desto länger dauert es.
- Wenn Sie einen Standardwert hinzufügen (was Sie getan haben), dauert es länger.
- Wenn der Server stark ausgelastet ist, dauert es länger.
- Wenn Sie diese Datenbank nicht sperren oder in den Einzelbenutzermodus versetzen, dauert es länger.
Wenn ich so hässliche Sachen machen muss, versuche ich es nachts zu machen ... wie 2 Uhr morgens, wenn niemand drauf ist (und die Wartung läuft NICHT auf dem Server).
Viel Glück! :-)
Dies wird eine ganze Weile dauern. Dies liegt daran, dass Sie den Standardwert hinzufügen. Dies führt dazu, dass der SQL Server alle Zeilen in einer einzigen Transaktion aktualisiert. Stellen Sie sicher, dass niemand anderes die Tabelle verwendet, da dies zu einer Blockierung Ihres Prozesses führt.
quelle
Ich habe ähnliche Dinge in einer Tabelle mit mindestens 65 Millionen Zeilen gemacht und es hat nicht so lange gedauert. Haben Sie genug Speicher und eine ausreichende Leistung im Festplattensystem?
Wenn Sie den Prozess beschleunigen möchten, können Sie alle Indizes entfernen, die Clustered-Index- und Fremdschlüsseleinschränkungen ausführen, bevor Sie die Tabelle ändern. Dies muss jedoch erfolgen, wenn das System nicht verwendet wird. Andernfalls können inkonsistente Daten auftreten. Am Ende müssen Sie jedoch die Fremdschlüssel und die Indizes anwenden, bevor Sie fertig sind. Sie werden jedoch die Schmerzen für das Transaktionsprotokoll lindern, zumindest wenn Sie ein einfaches Wiederherstellungsmodell verwenden. In SQL Server 2008 können Sie die Indizes mit ONLINE = on und SORT_IN_TEMPDB = on erstellen
Håkan Winther
quelle
Sie werden so etwas nicht wirklich verknüpfen - egal was Sie tun SQL Server muss einige Zeilen in allen Zeilen in der Tabelle verarbeiten.
Sie können sicherstellen, dass es so schnell wie möglich ausgeführt wird, indem Sie sicherstellen, dass sich Ihre Datendateien und Protokolle auf separaten Laufwerken befinden und die anderen üblichen Empfehlungen.
quelle
Stunden für 10m Reihen sind viel zu lang. Stellen Sie sicher, dass nichts die Schlösser auf dem Tisch offen hält.
quelle
Bei einem Schulungskurs hatte ich ein Gespräch mit einigen DBAs vom DoD. Sie verwalten MySQL-Datenbanken mit 100 TB und mehr. Tabellenänderungen werden mit Dump und Load durchgeführt, dies erfordert jedoch offensichtlich einige Ausfallzeiten. Sie erwähnten auch, dass sie dies aufgrund der Zeit nicht gerne mit Datenbanken über 10 TB tun.
Die Daten werden ausgegeben, sie haben nicht angegeben, was zu tun ist, aber ich würde SQL-Dateien annehmen. Die Tabellen werden dann abgeschnitten und das Schema nach Bedarf geändert. Die Daten werden dann neu geladen.
quelle
Hatten Sie zufällig eine Reihe von Indizes für Ihre Tabelle und möglicherweise sogar einen Clustered-Index für Ihre Tabelle T?
Ich hatte auch Probleme beim Hinzufügen einer neuen Spalte (es ist eine Identitätsspalte). Die Tabelle hatte 9,3 Millionen Zeilen und einen nicht gruppierten Index für den Primärschlüssel.
Wenn wir aus irgendeinem Grund den Index für Tabelle T löschen, fügen Sie anschließend die Spalte hinzu und fügen Sie dann den Index für Tabelle T wieder hinzu. Auf dem Standard SQLServer 2008 war er im Grunde 60-mal schneller.
Ich habe nicht herausgefunden, warum es so schnell ging, hoffentlich kann mir jemand eine Antwort darauf geben.
quelle
ALTER TABLE
Befehl verlangsamt, liegt darin, dass jeder Index aktualisiert werden muss (für 10 Millionen Zeilen pro Index) - eine erhebliche Menge zusätzlicher Festplatten-E / A und Zahlenkalkulation.