Maximale Tabellenkapazität in SQL Server 2008

11

Ich habe eine Anwendung, die jährlich mehr als 1 Milliarde Zeilen in eine Tabelle einfügt. Diese Tabelle enthält einige varcharund bigintSpalten und eine Blob - Spalte als auch.

Die 1 Milliarde Zeilen bestehen aus Verlaufsdaten, die zu Verfolgungszwecken aufbewahrt werden. Ich habe mich also gefragt, ob es eine Beschränkung der Tabellenkapazität geben wird, wenn ich in dieser Struktur gemäß diesem MSDN-Artikel über die maximale Tabellengröße fortfahre .

Bezieht sich die in diesem Link angegebene Datendateigröße auf die Tabellendatendateigruppe?

SPALT
quelle
@marc_s danke, dass du das verstanden hast. Fühlen Sie sich frei, sich uns in The Heap anzuschließen, wo wir unter anderem kollektive Aufmerksamkeit auf diese lenken
JNK
Was ist die maximale Größe jeder Zeile?
Nick Chammas

Antworten:

6

Es gibt keine praktische Begrenzung außer Speicherplatz. Ich habe die Tabelle, mit der Sie verknüpft sind, vollständig gelesen und überprüft.

Wenn Sie mehr als 16 TB benötigen, benötigen Sie mehrere Dateien (ein einfaches Verfahren).

usr
quelle
Ich denke, dies kann erreicht werden, indem die Tabelle partitioniert und die Partitionierung portiert wird, um verschiedene Dateigruppen zu verwenden, wenn ich richtig bin?
GAP
1
Das ist nicht einmal nötig. Fügen Sie einfach eine neue Datei hinzu (zur vorhandenen Dateigruppe). SQL Server füllt alle Dateien gleichmäßig. Wenn eine Datei nicht mehr wachsen kann, wächst nur die andere Datei.
usr
2

Eine Tabelle in SQL Server 2008 kann eine große Anzahl von Datensätzen verarbeiten. Wie @usr erwähnt hat, hängt dies vom Speicherplatz ab. Es wird jedoch empfohlen, die partitionierte Tabelle http://technet.microsoft zu verwenden , wenn Ihre Tabelle viele Zeilen enthält und weiter wächst . com / de-de / library / dd578580 (v = sql.100) .aspx

Wenn eine Datenbanktabelle auf Hunderte von Gigabyte oder mehr vergrößert wird, kann es schwieriger werden, neue Daten zu laden, alte Daten zu entfernen und Indizes zu verwalten

mehr Infos dazu

http://msdn.microsoft.com/en-us/library/ms190787.aspx

und wie man es implementiert http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizontal-partition-database-table/

AmmarR
quelle
Sie müssen jedoch sehr vorsichtig mit der Partitionierung sein. Die Funktion und der Schlüssel sowie der Anwendungsfall müssen sorgfältig abgewogen werden. Das logische Feld, auf das partitioniert werden soll, darf in keiner der Abfragen verwendet werden, was die Leistung beeinträchtigen würde.
JNK
Richtig, aber Milliarden von Zeilen in einer einzelnen Tabelle wirken sich auch auf die Leistung aus. Es besteht auch die Möglichkeit, Ihre Daten in vielen Tabellen aufzuteilen, z. B. eine separate Tabelle für jedes Jahr. Wenn Sie alle Daten anzeigen möchten, können Sie eine Ansicht verwenden, aber bei Zumindest wird das Einfügen und Aktualisieren auf jeder Tabelle schneller sein
AmmarR
Einfügungen in eine große Tabelle sind nicht unbedingt langsam, sondern hängen von Schlüsseln und Indizes ab. Ich lade monatlich etwa 30 Millionen Zeilen in eine Tabelle mit 700 Millionen vorhandenen Zeilen, und wir führen keine Partitionierung durch. Ich habe versucht, zu partitionieren, aber es verursachte mehr Probleme als es löste. Dies ist eigentlich eine Frage, wenn Sie es überprüfen möchten.
JNK
Ich habe darüber nachgedacht, meine Verlaufsdaten in eine separate Tabelle zu verschieben und eine Vereinigungsansicht zu erstellen, damit sie von der Anwendung verwendet werden kann, wenn Abfrageverlauf + neueste Daten benötigt werden. Dies entspricht weniger als 25% der Abfragen, die ich im System habe. Ist dies effizienter, als mehrere Datendateien zu haben oder die Tabelle basierend auf der Spalte zu partitionieren, die Daten als aktuell markiert? Was wird aus IO-Operationen effizienter? Mein Zweifel ist, dass es aus IO-Sicht in beiden Lösungen gleich sein wird.
Lücke
Jeder Ansatz, den Sie wählen, hat seine Best Practices, die ihn gut oder schlecht machen können. Ich meine, wenn Sie viele Tabellen haben, werden Ihre Abfragen kompliziert und es wird schwierig zu pflegen sein, wenn Sie eine Tabelle haben und Tabellenpartitionierung verwenden, gibt es unterschiedliche Überlegungen wie Ihre SQL-Edition sollte Enterprise usw. sein. Viele Datendateien werden für bessere E / A-Vorgänge empfohlen, haben aber auch die besten Methoden. Für die SQL-Leistung gibt es keinen direkten Weg ...
AmmarR
0

Vielleicht würde eine partitionierte Ansicht funktionieren.

Aus dem MSDN-Artikel "Partitionierte Ansicht verwenden" :

In partitionierten Ansichten können die Daten in einer großen Tabelle in kleinere Elementtabellen aufgeteilt werden. Die Daten werden basierend auf Datenwertbereichen in einer der Spalten zwischen den Elementtabellen aufgeteilt. Die Datenbereiche für jede Elementtabelle werden in einer CHECK-Einschränkung definiert, die in der Partitionierungsspalte angegeben ist. Anschließend wird eine Ansicht definiert, in der UNION ALL verwendet wird, um die Auswahl aller Elementtabellen in einer einzigen Ergebnismenge zu kombinieren. Wenn SELECT-Anweisungen, die auf die Ansicht verweisen, eine Suchbedingung für die Partitionsspalte angeben, bestimmt der Abfrageoptimierer anhand der CHECK-Einschränkungsdefinitionen, welche Elementtabelle die Zeilen enthält.

Ich bin mir nicht sicher, wie es sich von einer paritionierten Tabelle unterscheidet, über die AmmarR in seiner Antwort Informationen geliefert hat.

Adam Porad
quelle