У меня есть таблица из трех столбцов с чуть более чем 6 миллиардами строк в SQL Server 2008 R2.
Мы запрашиваем его каждый день, чтобы создавать поминутные диаграммы системного анализа для наших клиентов. Я не заметил никаких падений производительности базы данных (хотя тот факт, что она увеличивается на ~ 1 ГБ каждый день, делает управление резервным копированием немного сложнее, чем хотелось бы).
Обновление июль 2016 г.
Мы достигли ~ 24,5 миллиардов строк, прежде чем резервные копии стали достаточно большими, чтобы мы могли принять решение об усечении записей старше двух лет (~ 700 ГБ хранятся в нескольких резервных копиях, в том числе на дорогих лентах). Стоит отметить, что производительность не была значительным мотиватором в этом решении (т. Е. Оно все еще работало отлично).
Я настоятельно рекомендую эту статью всем, кто пытается удалить 20 миллиардов строк из SQL Server . Соответствующий код в случае, если ссылка умирает (полное объяснение читайте в статье):
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
Обновление ноябрь 2016 г.
Если вы планируете хранить столько данных в одной таблице: не делайте этого. Я настоятельно рекомендую вам рассмотреть возможность разделения таблицы (вручную или с помощью встроенных функций, если вы используете версию Enterprise). Это делает удаление старых данных таким же простым, как усечение таблицы один раз в неделю (неделю / месяц и т. Д.). Если у вас нет Enterprise (которого у нас нет), вы можете просто написать сценарий, который запускается один раз в месяц, удаляет таблицы старше 2 лет, создает таблицу следующего месяца и восстанавливает динамическое представление, которое объединяет все разделы. таблицы вместе для облегчения запросов. Очевидно, что «один раз в месяц» и «старше 2 лет» должны быть определены вами в зависимости от того, что имеет смысл для вашего варианта использования.