Löschen/Neuerstellen von Indizes während der Bulk Insert
Ich habe Tabellen, die hat mehr als 70 Millionen Datensätze in es; was ich nur gefunden, dass die Entwickler waren löschen von Indizes, bevor die bulk insert und dann die Erstellung nochmals nach dem bulk-insert ist vorbei. Die Ausführungszeit für die gespeicherte Prozedur ist fast 30 Minuten (do drop index, Massenkopieren einfügen, erstellen Sie dann den index von Grund auf neu
Rat: Ist das eine gute Praxis, um die drop-INDEXs aus der Tabelle, die mehr als 70+ Millionen Datensätze und die Erhöhung von 3-4 Millionen jeden Tag.
Würde es helfen, um die Leistung zu verbessern, indem nicht Drop index vor der bulk insert ?
Was ist die beste Praxis befolgt werden, während Sie BULK insert in GROßEN TISCH.
Dank und Grüße
- Haben Sie es ausprobiert? Der Tisch ist im Einsatz bei der Verladung? Verwenden Sie eine staging-Tabelle?
- Ich würde sorgen, warum Sie Last 70 Millionen Zeilen pro Tag, wenn nur 3-4 Millionen sind das eigentlich neue.
- Ich denke 3-4 ist der laden in bestehende 70. Das bedeutet auch, es ist vielleicht 20 Tage des Wachstums, so weit...
- nach dem Lesen es immer wieder, dass der Fall zu sein scheint. Op muss wirklich geben, mehr info, es gibt keine "einzige" Weg, es zu tun, es hängt von vielen Faktoren ab.
- 70 Millionen Datensätze sind bis zum heutigen Tag; 1-2 Millionen eingefügt Alltag, die vorhandene Tabelle. Die Ausführung ist fast unter 30 Minuten plus... brauchen, um diese zu treffen SLA... ich weiß nicht, ob die Deaktivierung von index und dann reorganisieren helfen würde oder nicht.
- Funktioniert diese Hilfe? stackoverflow.com/questions/751039/...
- Gemäß der obigen link - Wort deaktiviert und dann erstellen Sie Indizes wieder. Wie es ist anders zu löschen und dann die Erstellung nochmals.
- Der link sagt "deaktivieren" und "rebuild". Zeigen einige Mühe. Sie haben gesucht MSDN? msdn.microsoft.com/en-us/library/ms177456.aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie alles, was in SQL Server, "Es Hängt"
Gibt es Zuschläge in der Pflege von Indizes bei insert-und da ist der Mehraufwand bei der Neuerstellung der Indizes nach dem insert. Der einzige Weg, um endgültig festzustellen, welche Methode verursacht weniger Aufwand ist, zu versuchen, Sie beide und Teste.
Wenn ich ein Wett Mann, ich würde meine Wette, dass das verlassen der Indizes im Ort wäre edge heraus, die komplett neu, aber ich habe nicht das vollständige Bild zu machen, eine Vermutung. Nochmals, der einzige Weg, um sicher wissen, ist, zu versuchen, beide Optionen.
Ein Schlüssel-Optimierung soll sicherstellen, dass Ihre bulk-insert ist in Cluster-key bestellen.
Wenn ich lese Ihre Frage richtig, die Tabelle ist ziemlich off limits (gesperrt) für die Dauer der Belastung und das ist ein problem.
Wenn Ihr primäres Ziel ist die Steigerung der Verfügbarkeit/Abnahme blockieren, versuchen sich die A/B-Tabelle-Ansatz.
Den A/B-Ansatz gliedert sich wie folgt:
Gegeben eine Tabelle namens "MyTable" Sie haben zwei physikalische Tabellen (MyTable_A und MyTable_B) und einer Ansicht (MyTable).
Wenn MyTable_A enthält die aktuelle "aktive" dataset, Ihre Ansicht (MyTable) wählt alle Spalten aus MyTable_A. In der Zwischenzeit können Sie haben carte blanche auf MyTable_B (enthält eine Kopie des MyTable_A Daten und die neuen Daten, die Sie schreiben.) Einmal MyTable_B geladen, indiziert und bereit zu gehen, aktualisieren Sie Ihre "MyTable" anzeigen zeigen MyTable_B und abschneiden MyTable_A.
Dieser Ansatz setzt Voraus, dass Sie bereit sind, erhöhen die I/O-und storage-Kosten (dramatisch, in deinem Fall) um die Verfügbarkeit zu gewährleisten. Es wird auch davon ausgegangen, dass Ihr großer Tisch ist auch relativ statisch. Wenn Sie diesem Ansatz Folgen, würde ich empfehlen, eine zweite Ansicht, so etwas wie MyTable_old, die Punkte auf der nicht-live-Tabelle (d.h. wenn MyTable_A ist die aktuelle Präsentation-Tabelle und wird durch die Tabelle MyTable anzeigen, MyTable_old verweisen MyTable_B) würden Sie aktualisieren die MyTable_old Ansicht zur gleichen Zeit, die Sie aktualisieren Sie die Tabelle MyTable anzeigen.
Abhängig von der Art der Daten, die Sie einsetzen (und Ihre SQL Server-version/edition), Sie können auch in der Lage sein, um die Vorteile der Partitionierung (MSDN-blog zu diesem Thema.)