MS Sql Server получает перегрузку с "приостановленными" запросами, в основном читает. Есть ли способ это исправить?

У меня есть Microsoft Sql Server, который обрабатывает умеренный объем трафика для программного обеспечения компании, состоящего из нескольких клиентов в Java и C#.

Он перегружен "приостановленными" запросами. Они в конечном итоге проходят, но некоторые из них истекают (особенно записи). Запросы в основном для чтения.

Есть ли способ ускорить это или исправить это каким-то другим способом?

Вот изображение моего Activity Monitor, чтобы показать, о чем я говорю:

http://i.imgur.com/9ADDASf.png

Примечание: мы планировали переехать на MySql в течение некоторого времени. Поможет ли это вообще? Я знаю, что MS Sql является сильным, но с его значением по умолчанию Read-Committed, это может повредить что-нибудь?

2 ответа

Решение

Ок, разобрался с вопросом.

Стандартные настройки 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/

Типы ожидания, показанные на вашем скриншоте:

  • LCK_M_X - Происходит, когда задача ожидает получения эксклюзивной блокировки.
  • CXPACKET - происходит с параллельными планами запросов при попытке синхронизировать итератор обмена обработчиком запросов. Если ожидание является чрезмерным и не может быть уменьшено путем настройки запроса (например, путем добавления индексов), рассмотрите возможность корректировки порога стоимости для параллелизма или снижения степени параллелизма.

(Оба они были C&Ped из MSDN.)

MSDN предлагает настроить ваши запросы и / или добавить индексы выше. Это, вероятно, лучший первый шаг, чем просто использование SQL Server и переключение на что-то другое. (Если проблема заключается в ваших запросах, ну, они все равно будут неэффективными на MySql, ИМХО.) Итак, я собираюсь порекомендовать взглянуть на ресурсы статистики ожидания Брента Озара и искать такие вещи, как десятка дорогих запросов. Надеюсь, это укажет вам правильное направление.

Другие вопросы по тегам