Задать вопрос

Как улучшить производительность БД при одновременном подключении 1000 пользователей?

Есть Sql Server. На нем БД размером 500Гб. Все это работает на железном сервере с 100Гб ОЗУ и 2мя Xeonами.
БД используется веб-приложением. В моменты активной работы с приложением 1000 и более пользователей наблюдаются проблемы с отзывчивостью приложения. Профилировщик показывает на БД. В БД активно используется несколько таблиц, на которых постоянно висят блокировки. Таблицы размером по несколько десятков миллионов записей. В таблицы постоянно идут Insert и Update. С этих таблиц настроено чтение грязных данных (nolock), дабы избежать лишних блокировок.

Как можно оптимизировать работу с БД, чтобы избежать проблем с производительностью и блокировками?
  • Вопрос задан
  • 1007 просмотров
Подписаться 6 Оценить 2 комментария
Решения вопроса 2
@shagguboy
в общем случае никак потому что на блокировки может быть завязана бизнес логика - как например у 1С.
в частном случае надо переходить на версионированные таблицы, они специально сделаны для разведения читателей и писателей.
https://technet.microsoft.com/ru-ru/library/ms1750...
Ответ написан
Комментировать
mahoho
@mahoho
Full stack certified PHP developer.
Вынесите транзакции в снэпшоты:
6f0c692d71cc42818ab885feea4d16d9.png
, используйте уровень изоляции READ COMMITED SNAPSHOT - проблема с локами уйдет, но сильно возрастёт нагрузка на tempdb, это решается переносом её на быстрый диск (на SSD хороший).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
w1ld
@w1ld
Программирую
Возможно, поможет уменьшение количества блокировок у транзакций в приложении. См. уровни изолирования транзакций на https://msdn.microsoft.com/en-us/library/ms709374%... .

Вообще, звучит как сценарий для хорошего рефакторинга приложения и базы данных. Уменьшение зависимостей и др. Здесь можно было бы посмотреть в сторону CQRS, где возможны разные БД для комманд и для запросов.
Ответ написан
Комментировать
swanrnd
@swanrnd
Издатель HTML5 игр
База 500ГБ плохо, плохо когда она не помещается в ОЗУ. Может ее стоить разбить на несколько баз или почистить?
Я уверен, что 99% данных можно хранить в текстовом файле без БД.

Я не могу понять как грязные данные и блокировки сочетаются?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы