К сожалению, перезагрузка сервера решила проблему, таким образом, я все еще не знаю, почему это происходило, но это больше не.
Лично я предпочитаю несколько баз данных, так как это позволяет вам видеть, какие базы данных используют больше всего операций ввода-вывода и ОЗУ, с различными DMV - и позволяет легко переносить самые большие базы данных в другом месте по линии. Кроме того, существует разделение безопасности, которое всегда успокаивает клиентов.
Брент Озар затронул именно эту проблему в недавнем сообщении в блоге - определенно стоит прочитать, поскольку он очень хорош: http://www.brentozar.com/archive/2011/06/how-design-multiclient-databases/
Although I'd probably recommend going for a database per customer, if you want to stick to one database then it looks like schemas will be suitable given your requirements.
However, in addition to a schema per customer I would recommend that you also create a filegroup per customer, then place all the database objects for each customer into that filegroup. There are several advantages to this:
I believe the maximum number of filegroups you can have is 32,000-ish so this strategy should last until you really do need to think about splitting into different databases.
For more information I recommend the books online article 'Files and Filegroups Architecture' and the SQLCAT whitepaper on partial database availability: http://sqlcat.com/sqlcat/b/whitepapers/archive/2007/11/21/partial-database-availability.aspx
Похоже, вас больше интересует хранение всего в одной базе данных любой ценой (хотя вы это подняли), поскольку основная идея Питера для разбиения на отдельные базы данных была связана с производительностью и возможность масштабирования в долгосрочной перспективе. В этом случае вам нужно либо разделить таблицы на разные схемы для клиентов, либо переключиться на лицензию Enterprise Edition, чтобы вы могли использовать разделение таблиц и разделять общие таблицы на основе номера клиента.
Если все клиенты используют одну и ту же базу данных, и все веб-сайты используют один и тот же шаблон, это больше похоже на многопользовательскую CMS, и поэтому наличие единой базы данных здесь действительно имеет смысл.
Я бы не стал рассматривать проблему в том, что обновления одного клиента влияют на всех остальных, а скорее в низком уровне просто медленных обновлений и запросов в целом. Предполагая, что оборудование и нагрузка не меняются, 150 баз данных, вероятно, будут работать так же, как решение для одной базы данных (возможно, медленнее при определенных обстоятельствах)
. Я предполагаю, что ваша основная таблица - это таблица «листингов», которая имеет примерно 150 * 1000 живых строк (предположительно + исторические записи).
Это не слишком большой объем данных, и машина с разумными характеристиками не должна иметь проблем.
Я ' В запросе на чтение я бы добавил «читать незафиксированный снимок»
В обновлениях есть несколько возможных исправлений для этого 1. Используйте слияние, а не несколько операторов обновления. 2. Используйте курсор, чтобы предотвратить отмену блокировки. 3. Добавьте новые записи для обновленных списков и просто обновите битовый флаг «является текущим» на старых
Учитывая, что это было 2 года назад, каково было окончательное решение?
Я задавал себе тот же вопрос, когда планировал реструктурировать инфраструктуру базы данных. Эта статья мне очень помогла.
[ https://msdn.microsoft.com/en-us/library/aa479086.aspx] [1]