У меня есть Microsoft Sql Server, который обрабатывает умеренный объем трафика для пакета программного обеспечения компании, состоящего из нескольких клиентов на java и C #.
Он перегружен "приостановленными" запросами. В конечном итоге они проходят, но у некоторых истекает время ожидания (особенно записи). Запросы в основном читаются.
Есть ли способ ускорить это или исправить другим способом?
Вот это картинка монитора активности, чтобы показать, о чем я говорю:
Боковое примечание: мы планируем перейти на MySql в течение некоторого времени. Это вообще поможет? Я знаю, что MS Sql силен, но с его значением по умолчанию Read-Committed, может ли это повредить чему-нибудь?
Типы ожидания, показанные на скриншоте:
(Оба они были C & Ped из MSDN.)
MSDN предлагает настроить ваши запросы и / или добавить индексы выше. Вероятно, это лучший первый шаг, чем просто отказаться от SQL Server и переключиться на что-то еще. (Если проблема в ваших запросах, ну, они все равно будут неэффективными на MySql, IMHO.) Итак, я рекомендую посмотреть Ресурсы по статистике ожидания Брента Озара и ищу такие вещи, как десятка самых дорогих запросов. Надеюсь, это укажет вам правильное направление.
Хорошо, разобрался в проблеме.
По умолчанию MS Sql использует все ядра сервера для выполнения больших запросов. У нас есть большие чтения, поэтому складывалась длинная строка запросов, ожидающих обработки.
Чтобы исправить это, я установил максимальную степень параллелизма на 2 ядра вместо неограниченного (8 на нашем сервере), и я установил порог стоимости параллелизма на 10 (секунд) с 5, что является временем, когда параллелизм начнет работать. в для запросов.
И то, и другое можно найти в Sql Server Management Studio, щелкнув сервер правой кнопкой мыши и выбрав "Свойства", а затем щелкнув вкладку "Дополнительно".
Я нашел эту статью, в которой объясняется и решается проблема:
http://www.brentozar.com/archive/2013/08/what-is-the-cxpacket-wait-type-and-how-do-you-reduce-it/