У мене є таблиця з трьох стовпців із трохи більше 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 років" ви повинні визначати виходячи з того, що має сенс для вашого випадку використання.