Ich habe eine dreispaltige Tabelle mit etwas mehr als 6 Milliarden Zeilen in SQL Server 2008 R2.
Wir fragen es jeden Tag ab, um minutenweise Systemanalysediagramme für unsere Kunden zu erstellen. Ich habe keine Beeinträchtigungen der Datenbankleistung bemerkt (obwohl die Tatsache, dass sie jeden Tag um ~ 1 GB zunimmt, die Verwaltung von Backups etwas komplizierter macht, als ich es gerne hätte).
Update Juli 2016
Wir haben es auf ~ 24,5 Milliarden Zeilen geschafft, bevor die Backups groß genug wurden, um Datensätze zu kürzen, die älter als zwei Jahre sind (~ 700 GB, die in mehreren Backups gespeichert sind, auch auf teuren Bändern). Es ist erwähnenswert, dass die Leistung bei dieser Entscheidung kein wesentlicher Motivator war (dh sie funktionierte immer noch hervorragend).
Für alle, die versuchen, 20 Milliarden Zeilen von SQL Server zu löschen, empfehle ich diesen Artikel . Relevanter Code für den Fall, dass der Link stirbt (eine vollständige Erklärung finden Sie im Artikel):
ALTER DATABASE DeleteRecord SET RECOVERY SIMPLE;
GO
BEGIN TRY
BEGIN TRANSACTION
SELECT *
INTO dbo.bigtable_intermediate
FROM dbo.bigtable
WHERE Id % 2 = 0;
TRUNCATE TABLE dbo.bigtable;
SET IDENTITY_INSERT dbo.bigTable ON;
INSERT INTO dbo.bigtable WITH (TABLOCK) (Id, c1, c2, c3)
SELECT Id, c1, c2, c3 FROM dbo.bigtable_intermediate ORDER BY Id;
SET IDENTITY_INSERT dbo.bigtable OFF;
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
ALTER DATABASE DeleteRecord SET RECOVERY FULL;
GO
Update November 2016
Wenn Sie so viele Daten in einer einzigen Tabelle speichern möchten, tun Sie dies nicht. Ich empfehle dringend, die Tabellenpartitionierung in Betracht zu ziehen (entweder manuell oder mit den integrierten Funktionen, wenn Sie Enterprise Edition ausführen). Dies macht das Löschen alter Daten so einfach wie das einmalige Abschneiden einer Tabelle (Woche / Monat / etc.). Wenn Sie nicht über Enterprise verfügen (was wir nicht haben), können Sie einfach ein Skript schreiben, das einmal im Monat ausgeführt wird, Tabellen löscht, die älter als 2 Jahre sind, die Tabelle des nächsten Monats erstellt und eine dynamische Ansicht neu generiert, die die gesamte Partition verbindet Tabellen zusammen für einfache Abfrage. Offensichtlich sollten "einmal im Monat" und "älter als 2 Jahre" von Ihnen basierend darauf definiert werden, was für Ihren Anwendungsfall sinnvoll ist.