Каково максимальное рекомендуемое количество строк, которое автономный сервер SQL 2008 R2 должен хранить в одной таблице? - PullRequest
2 голосов
/ 20 декабря 2010

Я проектирую свою БД для функциональности и производительности для веб-приложений AJAX в реальном времени, и в настоящее время у меня нет ресурсов для добавления избыточности сервера БД или распределения нагрузки.

К сожалению, у меня есть таблица в моей БД, которая потенциально может хранить сотни миллионов строк, и мне нужно будет быстро читать и писать, чтобы предотвратить отставание веб-интерфейса.

Большинство, если не все, столбцы в этой таблице индексируются индивидуально, и я хотел бы знать, есть ли другие способы облегчить нагрузку на сервер при выполнении запросов для больших таблиц. Но есть ли в конечном итоге ограничение на размер (в строках или ГБ) таблицы до того, как один некластеризованный сервер SQL начнет задыхаться?

В моей БД всего дюжина таблиц, возможно, с несколькими дюжинами внешних связей. Ни одна из моих таблиц не имеет более 8 или около того столбцов, и только одна или две из этих таблиц будут хранить большое количество строк. Надеюсь, что простота моей БД компенсирует огромные объемы данных в этих двух таблицах ...

Ответы [ 3 ]

4 голосов
/ 20 декабря 2010

Единственным ограничением является размер вашего первичного ключа. Это INT или BIGINT?

SQL с радостью сохранит данные без проблем. Тем не менее, с 100 миллионами строк, вам лучше разделить данные. Есть много хороших статей на эту тему, таких как статья .

С разделами вы можете иметь 1 поток на раздел, работающий одновременно, чтобы распараллелить запрос даже больше, чем это возможно без разделения.

4 голосов
/ 20 декабря 2010

Строки строго ограничены объемом доступного дискового пространства. У нас есть SQL-серверы с сотнями миллионов строк данных. Конечно, эти серверы довольно большие.

Чтобы веб-интерфейс был быстрым, вам нужно подумать о том, как вы получаете доступ к этим данным.

Один из примеров - избегать агрегированных запросов любого типа, которые требуют обработки больших массивов данных. Такие вещи, как SUM (), могут быть убийственными в зависимости от того, сколько данных они пытаются обработать. В этих ситуациях вам гораздо лучше заранее рассчитать любые сводные или сгруппированные данные и позволить своему сайту запрашивать эти аналитические таблицы.

Далее вам нужно разделить данные. Разделите эти разделы по разным дисковым массивам. Когда SQL нужно перейти на диск, это упрощает распараллеливание операций чтения. (@Simon коснулся этого).

По сути, проблема сводится к тому, сколько данных вам нужно получить в любой момент времени. Это основная проблема независимо от количества данных, которые у вас есть на диске. Даже небольшие базы данных могут быть забиты, если диски работают медленно и объем доступной оперативной памяти на сервере БД недостаточен для хранения достаточного количества БД в памяти.

Обычно для таких систем большие объемы данных в основном инертны, что означает, что к ним редко обращаются. Например, система PO может хранить историю всех счетов, когда-либо созданных, но в действительности они имеют дело только с любыми активными.

Если ваша система предъявляет аналогичные требования, то у вас может быть таблица для активных записей, и вы просто архивируете их в другую таблицу как часть ночного процесса. Вы могли бы даже пересчитать статистику, такую ​​как среднемесячные значения (например), как часть этого архива.

Просто некоторые мысли.

1 голос
/ 20 декабря 2010

Моя интуиция говорит мне, что с тобой, вероятно, все будет в порядке, но тебе придется иметь дело с производительностью.Это будет зависеть от приемлемого времени получения результатов запросов.

Для вашей таблицы с «сотнями миллионов строк», какой процент данных регулярно используется?Есть ли какие-то данные, к которым редко обращаются?Некоторые пользователи имеют доступ к выбранным данным, а другие выбирают другие данные?Вы можете извлечь выгоду из разделения данных.

...