MS Sql Server получает перегрузку с "приостановленными" запросами, в основном читает. Есть ли способ это исправить?
У меня есть Microsoft Sql Server, который обрабатывает умеренный объем трафика для программного обеспечения компании, состоящего из нескольких клиентов в Java и C#.
Он перегружен "приостановленными" запросами. Они в конечном итоге проходят, но некоторые из них истекают (особенно записи). Запросы в основном для чтения.
Есть ли способ ускорить это или исправить это каким-то другим способом?
Вот изображение моего Activity Monitor, чтобы показать, о чем я говорю:
Примечание: мы планировали переехать на 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, ИМХО.) Итак, я собираюсь порекомендовать взглянуть на ресурсы статистики ожидания Брента Озара и искать такие вещи, как десятка дорогих запросов. Надеюсь, это укажет вам правильное направление.