Максимальная емкость таблицы в SQL Server 2008

11

У меня есть приложение, которое вставляет более 1 миллиарда строк ежегодно в таблицу. Эта таблица содержит некоторые varcharи bigintстолбцы и один столбец блоб , а также.

1 миллиард строк состоит из данных истории, которые хранятся в целях отслеживания. Поэтому мне было интересно, будет ли ограничение емкости таблицы, если я продолжу в этой структуре в соответствии с этой статьей MSDN о максимальном размере таблицы .

Соответствует ли размер файла данных, упомянутый в этой ссылке, группе файлов данных таблицы?

GAP
источник
@marc_s спасибо, что поймали это. Не стесняйтесь присоединиться к нам в Кучи, где, помимо прочего, мы привлекаем к ним коллективное внимание
JNK
Какой максимальный размер каждой строки?
Ник Чаммас

Ответы:

6

Там нет практического ограничения, кроме дискового пространства. Я прочитал таблицу, на которую вы ссылались, и проверил ее.

Если вам нужно больше 16 ТБ, вам нужно несколько файлов (простая процедура).

USR
источник
Я думаю, что это может быть достигнуто путем разбиения таблицы и получения разделов для использования различных групп файлов, если я прав?
GAP
1
Это даже не обязательно. Просто добавьте новый файл (в существующую файловую группу). SQL Server начнет заполнять все файлы равномерно. Если один файл больше не может расти, он просто увеличит другой файл.
USR
2

таблица в SQL Server 2008 может обрабатывать большое количество записей, и, как упомянул @usr, это зависит от дискового пространства, но рекомендуется, чтобы, если в вашей таблице много строк и она продолжает расти, вы использовали Разделенную таблицу http://technet.microsoft. ком / EN-US / библиотека / dd578580 (v = SQL.100) .aspx

Когда размер таблицы базы данных увеличивается до сотен гигабайт или более, становится сложнее загружать новые данные, удалять старые данные и поддерживать индексы

больше информации об этом

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

и как это реализовать http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizont-partition-database-table/

AmmarR
источник
Вы должны быть очень осторожны с разделением. Необходимо тщательно продумать функцию и ключ, а также вариант использования. Логическое поле для разделения никогда не может использоваться ни в одном из запросов, что может снизить производительность.
JNK
Правда, но миллиарды строк в одной таблице также будут влиять на производительность, есть также возможность разделения данных во многих таблицах, например, отдельной таблицы для каждого года, и если вы хотите просмотреть все данные, вы можете использовать представление A, но в по крайней мере, удаление и обновление будет быстрее на каждом столе
AmmarR
вставки в огромную таблицу не обязательно медленные, это зависит от ключей и индексов. Я ежемесячно загружаю около 30-ти строк в таблицу, в которой есть 700-метровые строки, и мы не занимаемся секционированием. Я попытался разметить, но это вызвало больше проблем, чем решило. Это на самом деле вопрос, если вы хотите проверить это.
JNK
Я думал о том, чтобы переместить мои данные истории в отдельную таблицу и создать объединенное представление, чтобы оно могло использоваться приложением, когда требуется история запросов + последние данные, что составляет примерно менее 25% запросов, которые у меня есть в системе. Будет ли это эффективнее, чем иметь несколько файлов данных или разделить таблицу на основе столбца, который помечает данные как последние? От операций ввода-вывода, которые будут более эффективными? потому что я сомневаюсь, что это будет одинаково с точки зрения IO в обоих решениях.
GAP
любой подход, который вы используете, имеет свои лучшие практики, которые могут сделать его хорошим или плохим, я имею в виду, что если у вас много таблиц, ваш запрос будет сложным, и его будет сложно обслуживать, если у вас есть одна таблица и вы используете разбиение таблиц, существуют различные соображения, такие как ваша версия sql должна быть корпоративной и т. д., так как для улучшения операций ввода-вывода рекомендуется множество файлов данных, но в ней также есть свои лучшие практики, для производительности sql нет прямого пути ...
AmmarR
0

Возможно разделенное представление будет работать.

Из статьи MSDN « Использование разделов» :

Секционированные представления позволяют разбивать данные в большой таблице на более мелкие таблицы элементов. Данные распределяются между таблицами-членами на основе диапазонов значений данных в одном из столбцов. Диапазоны данных для каждой таблицы элементов определены в ограничении CHECK, указанном в столбце разделения. Затем определяется представление, которое использует UNION ALL для объединения выборок всех таблиц-членов в один набор результатов. Когда операторы SELECT, ссылающиеся на представление, задают условие поиска для столбца раздела, оптимизатор запросов использует определения ограничений CHECK, чтобы определить, какая таблица элементов содержит строки.

Я не уверен, чем она отличается от Таблицы с разделением, о которой AmmarR предоставил информацию в своем ответе.

Адам Порад
источник