Сколько это слишком много баз данных на SQL Server? - PullRequest
12 голосов
/ 19 июля 2010

Я работаю с приложением, в котором мы храним данные наших клиентов в отдельных базах данных SQL для каждого клиента.До сих пор это работало замечательно, даже был случай, когда какой-то плохой код выбрал неправильные идентификаторы клиентов из базы данных, и, поскольку единственные данные в базе данных принадлежали этому клиенту, ущерб был не таким серьезным, как мог бы быть.Меня беспокоит количество баз данных, которые у вас реально есть на SQL Server.

Существуют ли дополнительные издержки для каждой новой базы данных, которую вы создаете?Мы в конечном итоге попали в стену, где у нас есть только несколько баз данных на одном сервере?Спецификации SQL Server говорят, что у вас может быть что-то вроде 32000 баз данных, но это возможно, есть ли у кого-нибудь большое количество баз данных на одном сервере и с какими проблемами вы сталкиваетесь.

Спасибо,

Frank

Ответы [ 6 ]

13 голосов
/ 19 июля 2010

Верхние пределы:

  • дисковое пространство
  • память
  • обслуживание

Примеры:

  • Восстановление индексов для 32-килобайтных баз данных?Когда?
  • Если в 10% 32-килобайтных баз данных имеется активный набор данных объемом 100 МБ в одно время, вы уже находитесь в памяти целевого сервера 320 ГБ
  • , зная, к какой БД вы подключенытоже
  • ...

Эффективное ограничение зависит от нагрузки, использования, размера базы данных и т. д.

Редактировать: И пропускную способность, как упоминал Уайетт Барнетт ... Я забыло сети, узкое место все забывают о ...

7 голосов
/ 19 июля 2010

Самая большая проблема со всеми несколькими базами данных состоит в том, чтобы синхронизировать их все при внесении изменений в схему. Насколько реально количество баз данных у вас может быть и система работает хорошо, как обычно, это зависит. Это зависит от того, насколько мощен сервер и насколько велики базы данных. Вероятно, вы захотите иметь несколько серверов в какой-то момент не только потому, что это будет быстрее для ваших клиентов, но и потому, что это подвергнет риску меньше клиентов одновременно, если что-то случится с сервером. В какой момент это может решить только ваша компания. Конечно, если вы начинаете получать много тайм-аутов, может быть указан другой сервер (или исправление ваших плохих запросов также может это сделать). Крупные клиенты часто платят премию за размещение на отдельном сервере, поэтому учитывайте это при определении цены. У нас был один клиент, настолько параноидально относящийся к их данным, что у нас был отдельный сервер, который даже не был расположен рядом с другими серверами. За это они заплатили большие деньги, так как нам пришлось арендовать дополнительное место.

2 голосов
/ 19 июля 2010

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

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

2 голосов
/ 19 июля 2010

Интернет-провайдеры обычно имеют один сервер баз данных, который используется сотнями или тысячами баз данных.

1 голос
/ 04 июля 2014

Я знаю, что это старый поток, но он имеет ту же структуру, которую мы использовали в течение последних 2 лет, и в настоящее время работают 1768 баз данных на 3 серверах.

У нас есть следующая настройка (не включая зеркалаи т. д.):

  • 2 сервера веб-фермы и 4 контент-сервера
  • Экземпляр SQL только для основной базы данных клиентов, которая запрашивается, когда они получают доступ к своей веб-странице по идентификаторуполучить имя сервера / экземпляра и базы данных, на которых находятся их данные.Затем он сохраняется в билете аутентификации.
  • 3 сервера SQL для размещения баз данных клиентов с распределением нагрузки при создании на основе текущего общего числа учащихся, которые существуют во всех базах данных на каждом сервере (быстро вычисляется по полю номера лицензии)в основной базе данных).
  • На каждом SQL Server имеется меньшая настройка основной базы данных, которая содержит общие статические данные, используемые всеми клиентами, что позволяет использовать меньшие клиентские базы данных и быстрее обновлять содержимое.

Самое важное, как упомянуто выше, - это синхронизировать структуры базы данных!Для этого я закончил программировать небольшую форму Windows .NET, которая просматривает всех клиентов в основной базе данных, и вы вставляете код для выполнения, и он будет циклически извлекать местоположение базы данных и выполнять пройденный вами SQL.

Создание новых клиентов также вызвало некоторые проблемы для нас, поэтому я закончил программировать систему управления для наших продавцов и создать новую базу данных на основе резервной копии неактивной «пустой» базы данных, поэтому у нас естьпоследняя БД без необходимости перепрограммировать весь скрипт создания базы данных.Затем он вставляет данные клиента в основную базу данных с указанием места, где была создана база данных, и переносит все старые данные из старой версии нашего программного обеспечения.Все это выполняется в отдельном экземпляре перед перемещением, что уменьшает любые блокировки SQL.

Теперь мы переходим к единой базе данных для нашей следующей версии программного обеспечения, поскольку избыточность базы данных практически невозможна при таком количестве баз данных!Это очень важно учитывать, так как SQL создает пару ожидающих задач, которые зеркально отражают ваши данные для каждой базы данных, как только вы начинаете умножать базы данных, они выходят из-под контроля, и система почти исключительно выполняет синхронизацию и может блокироваться из-за сдвигаколичество потоков.См. Стр. 30 документа Microsoft ниже:

Руководство SQLCAT по аварийному восстановлению высокой доступности. Pdf

Однако у меня есть сомнения по поводу перехода на одну базу данных, из-за некоторыхпроблемы, о которых говорилось выше, такие как постоянная проверка в каждой отдельной процедуре того, что текущий клиент имеет доступ только к своим данным, а также то, что происходит в соответствии с одной маленькой проблемой, теперь будет влиять на каждую отдельную базу данных, такую ​​как индексация таблиц и так далее.Кроме того, в тот момент, когда наш клиент размещен на трех серверах, но одна база данных будет означать, что у нас есть избыточность, но если ошибка была в базе данных, а не из-за сбоя сервера, то это не каждый 1 клиент, а только одна база данных.

В общем, все зависит от того, что вы делаете и хотите ли вы избыточности;для меня избыточность теперь является ключевой, и все в идеальном мире не должно происходить (например, ошибка, которая вызывает ошибки в базе данных для всех).Мы только начинали ожидать, что около ста или около того перейдут в систему из старого программного обеспечения, размещенного на собственном хосте, и это быстро превратилось в 200 500 000 1500 500 ... Теперь у нас более 750 000 пользователей используют нашу систему каждый год, и в августе / сентябре мыв сети более 15 000 одновременно работающих пользователей (ожидается, что в этом году их число достигнет 20 000).

Надеюсь, что это поможет кому-то по линии: -)

С уважением

Лиам

1 голос
/ 19 июля 2010

То, о чем вы действительно спрашиваете, это масштабируемость; Хотя в идеале установка 32 000 баз данных на одном сервере, вероятно, не является выгодной, это возможно (хотя и не рекомендуется).

Чтение - http://www.sql -server-performance.com / статьи / кластеризация / mass_scalability_p1.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...