Устранение неполадок всего приложения SQL Server или базы данных, которое, как представляется, медленно

Применяется к: SQL Server

При выполнении запросов к экземпляру SQL Server или конкретному приложению все запросы медленно выполняются. Чтобы устранить проблему, выполните следующие действия.

Шаг 1. Устранение неполадок с приложением

Проверьте уровень приложения. Выполните запрос из приложения, запустите его вручную в экземпляре SQL Server и узнайте, как оно выполняется. Протестируйте несколько запросов таким образом. Если запросы быстрее находятся на экземпляре SQL Server, проблема может находиться на уровне приложений или серверов приложений.

Если приложение работает на другом сервере, проверьте производительность сервера приложений (см . шаг 2. Устранение неполадок ос для устранения неполадок ). Возможно, вам потребуется обратиться к группе разработчиков приложений, чтобы проверить наличие проблем с приложением.

Шаг 2. Устранение неполадок ОС

Проверьте, работает ли операционная система, на которой работает SQL Server, медленно отвечает. Например, мышь медленно перемещается, окна не реагируют на длительные периоды, доступ к удаленному рабочему столу к серверу медленно или подключение к общей папке на сервере медленно.

Эта проблема может быть вызвана другой службой или приложением. Используйте Perfmon для устранения неполадок.

Сведения о других проблемах с производительностью ОС см . в документации по устранению неполадок с производительностью Windows Server.

Общие проблемы:

Эта проблема может быть вызвана другими приложениями, ОС или драйверами, работающими в системе.

Чтобы устранить эту проблему, используйте диспетчер задач, Монитор производительности или монитор ресурсов для выявления этой проблемы. Дополнительные сведения см . в руководстве по устранению неполадок с высоким потреблением ЦП.

Шаг 3. Устранение неполадок сети

Проблема может находиться на сетевом уровне, что приводит к медленному обмену данными между приложением и SQL Server. Используйте следующие методы для устранения этой проблемы:

  • Одним из симптомов этого может быть ASYNC_NETWORK_IO ожидание на стороне SQL Server. Дополнительные сведения см. в разделе "Устранение проблем с медленными запросами" из типа ожидания ASYNC_NETWORK_IO.

  • Обратитесь к администратору сети, чтобы проверить наличие проблем с сетью (брандмауэр, маршрутизация и т. д.).

  • Соберите трассировку сети и проверьте события сброса сети и повторной передачи. Сведения об устранении неполадок см. в разделе "Периодические" или "Периодические проблемы с сетью".

  • Включите счетчики Perfmon для проверки производительности сети на уровне сетевого интерфейса (сетевой адаптер). Должно быть отброшено ноль пакетов и пакетов ошибок. Проверьте пропускную способность сетевого интерфейса:

    • Сетевой интерфейс\Пакеты, полученные отменены
    • Сетевые интерфейсы\Полученные ошибки пакетов
    • Сетевой интерфейс\Исходящие пакеты удалены
    • Сетевый интерфейс\Ошибки исходящего трафика пакетов
    • Сетевой интерфейс\всего байт/с
    • Сетевой интерфейс\Текущая пропускная способность

Шаг 4. Устранение неполадок с высоким потреблением ЦП в SQL Server

Если в системе выполняются запросы с большим объемом ЦП, они могут привести к нехватке ресурсов ЦП других запросов. Однако часто высокая загрузка ЦП из запросов может быть признаком оптимизации запросов. Выполните следующие действия, чтобы устранить проблему:

  1. Во-первых, узнайте, вызывает ли SQL Server высокую загрузку ЦП (с помощью счетчиков Perfmon).
  2. Определите запросы, которые способствуют использованию ЦП.
  3. Обновление статистики.
  4. Добавьте отсутствующие индексы.
  5. Определите и решите проблемы, связанные с параметрами.
  6. Изучите и устраните проблемы с поддержкой SARGability.
  7. Отключите тяжелую трассировку.
  8. Исправление SOS_CACHESTORE спорных проблем спинлока.
  9. Настройте виртуальную машину.
  10. Увеличение масштаба системы путем добавления дополнительных ЦП.

Подробные инструкции по устранению неполадок см. в разделе "Устранение неполадок с высоким использованием ЦП" в SQL Server.

Шаг 5. Устранение неполадок с чрезмерной скоростью ввода-вывода в SQL Server

Еще одной распространенной причиной общей медленности рабочих нагрузок SQL Server являются проблемы ввода-вывода. Замедление ввода-вывода может повлиять на большую часть или все запросы в системе. Чтобы устранить проблему, используйте следующие методы:

  • Проверьте наличие проблем с оборудованием:

    • Неправильное настройка SAN (коммутатор, кабели, HBA, хранилище).
    • Превышена емкость ввода-вывода (небалансированная во всей сети SAN, а не только серверное хранилище, проверьте пропускную способность ввода-вывода всех серверов, совместно используемых сетью SAN).
    • Проблемы с драйверами или встроенного ПО или обновлениями.
  • Проверьте наличие неоптимальных запросов SQL Server, вызывающих большое количество операций ввода-вывода и насыщенных томов дисков с запросами ввода-вывода.

    • Найдите запросы, вызывающие большое количество логических операций чтения (или записи) и настройте эти запросы, чтобы свести к минимуму количество операций ввода-вывода диска, используя соответствующие индексы, является первым шагом.
    • Следите за тем, как они предоставляют оптимизатору запросов достаточную информацию, чтобы выбрать лучший план.
    • Изменение запросов и иногда таблиц может помочь в улучшении ввода-вывода.
  • Драйверы фильтров. Ответ ввода-вывода SQL Server может быть сильно затронут, если драйверы фильтра файловой системы обрабатывают большой трафик ввода-вывода.

    • Исключите папки данных из антивирусной проверки и проблемы с драйвером фильтра, исправленные поставщиками программного обеспечения, чтобы предотвратить влияние на производительность ввода-вывода.
  • Другие приложения. Другое приложение на том же компьютере с SQL Server может насыщать путь ввода-вывода чрезмерными запросами на чтение или запись. Эта ситуация может привести подсистему ввода-вывода за пределы емкости и привести к замедлению ввода-вывода для SQL Server. Определите приложение и настройте его или переместите его в другое место, чтобы устранить его влияние на стек ввода-вывода. Эта проблема также может быть вызвана приложениями, работающими на других компьютерах, но совместное использование той же сети SAN с этим компьютером SQL Server. Обратитесь к администратору SAN для балансировки трафика ввода-вывода (см. сведения о проблемах с оборудованием).

Подробные сведения об устранении неполадок, связанных с вводом-выводом в SQL Server, см. в статье "Устранение неполадок с медленной производительностью SQL Server, вызванных проблемами ввода-вывода".

Шаг 6. Устранение неполадок с памятью

Низкая память в системе или внутри SQL Server может привести к замедлению, когда запросы ожидают предоставления памяти (RESOURCE_SEMAPHORE) или компиляции памяти (RESOURCE_SEMAPHORE_QUERY_COMPILE). Чтобы устранить проблему, используйте следующие методы:

  • Проверьте наличие внешней памяти на уровне ОС с помощью счетчиков Perfmon:

    • Память\Доступные MBytes
    • Process(*)\Working Set (все экземпляры)
    • Process(*)\Private Bytes (все экземпляры)
  • Для внутреннего давления памяти используйте запросы SQL Server для запроса sys.dm_os_memory_clerks или использования DBCC MEMORYSTATUS.

  • Проверьте журнал ошибок SQL Server для ошибок 701 .

Подробные инструкции по устранению неполадок см. в разделе "Устранение неполадок с нехваткой памяти" в SQL Server.

Шаг 7. Устранение неполадок с блокировкой

Приобретение блокировки используется для защиты ресурсов в системе базы данных. Если блокировки получаются в течение длительного времени, а другие сеансы в конечном итоге ожидают этих блокировок, вы столкнулись с сценарием блокировки.

Короткая блокировка происходит в таких системах баз данных, как SQL Server все время. Но длительная блокировка, особенно если большинство или все запросы ожидают блокировки, могут привести ко всему серверу, который воспринимается как не отвечающий.

Чтобы устранить проблему, выполните следующие действия.

  1. Определите сеанс блокировки головы, просмотрев столбец blocking_session_id в выходных данных sys.dm_exec_requests dmV или столбец BlkBy в sp_who2 выходных данных хранимой процедуры.

  2. Найдите запросы, которые выполняет цепочка блокировок головной цепочки (то, что держит блокировки в течение длительного периода).

    Если запросы активно не выполняются в сеансе блокировки головы, возможно, была потеряна транзакция из-за проблем с приложением.

  3. Измените или настройте запрос блокировки головы, чтобы ускорить выполнение или уменьшить количество запросов внутри транзакции.

  4. Проверьте изоляцию транзакций, используемую в запросе, и настройте ее.

Подробные сведения об устранении неполадок в сценариях блокировки см. в статье "Общие сведения о блокировке SQL Server" и их устранении.

Шаг 8. Устранение неполадок планировщика (неозначение, взаимоблокировщик планировщика, неозначение прослушивателя IOCP, монитор ресурсов)

SQL Server использует совместный механизм планирования (планировщики) для предоставления потоков операционной системе для планирования на ЦП. Если существуют проблемы, связанные с планировщиками SQL, потоки SQL Server могут остановить обработку запросов, имен входа, выходов и т. д. В результате SQL Server может показаться неответственным, частично или полностью в зависимости от количества затронутых планировщиков. Проблемы планировщика могут возникнуть из-за различных проблем, включая ошибки продукта, внешние драйверы и фильтры, а также проблемы с оборудованием.

Выполните следующие действия, чтобы устранить эти проблемы:

  1. Проверьте журнал ошибок SQL Server, например следующие в момент отсутствия ответа от SQL Server:

    • ***********************************************
      *
      * BEGIN STACK DUMP:
      * 03/10/22 21:16:35 spid 22548
      *
      * Non-yielding Scheduler
      *
      ***********************************************
      
    • **********************************************
      *
      * BEGIN STACK DUMP:
      * 03/25/22 08:50:29 spid 355
      *
      * Deadlocked Schedulers
      *
      * ********************************************
      
      
    • * *******************************************************************************                                
      *                                                                                                                
      * BEGIN STACK DUMP:                                                                                              
      * 09/07/22 23:01:04 spid 0                                                                                     
      *                                                                                                                
      * Non-yielding IOCP Listener                                                                                     
      *                                                                                                                
      * *******************************************************************************   
      
    • * ********************************************
      *
      * BEGIN STACK DUMP:
      * 07/25/22 11:44:21 spid 2013
      *
      * Non-yielding Resource Monitor
      *
      * ********************************************
      
  2. При обнаружении одной из этих ошибок определите, какую версию накопительного обновления (CU) используется SQL Server. Проверьте наличие исправленных проблем в единицах CUS, отправленных после текущего накопительного пакета обновления. Исправления SQL Server см. в разделе "Последние обновления", доступные для поддерживаемых в настоящее время версий SQL Server. Подробный список исправлений можно скачать в этом файле Excel.

  3. Для получения дополнительных идей используйте устранение неполадок с планированием и получением sql Server.

  4. Проверьте наличие тяжелых сценариев блокировки или массовых запросов параллелизма, которые могут привести к взаимоблокировкам планировщиков. Подробные сведения см. в разделе "Дао" планировщика взаимоблокировки.

  5. Для прослушивателя IOCP, не являющегося источником, проверьте, не хватает ли вашей системы памяти, а SQL Server выдается. Другой причиной может быть антивирусная программа или программное обеспечение предотвращения вторжений перехватывает вызовы API ввода-вывода и замедляет активность потока. Дополнительные сведения см. в разделе "Прослушиватель IOCP", а также проблемы с производительностью и согласованности при загрузке определенных модулей или драйверов фильтров.

  6. При возникновении проблем с монитором ресурсов в некоторых случаях эта проблема может быть не обязательно связана. Дополнительные сведения см. в разделе "Монитор ресурсов" введите условие, отличное от получения, на сервере под управлением SQL Server.

  7. Если эти ресурсы не помогают, найдите дамп памяти, созданный в подкаталоге \LOG, и откройте запрос в службу поддержки с помощью Microsoft CSS, отправив дамп памяти для анализа.

Шаг 9. Поиск ресурсоемких профилировщиков или трассировок XEvent

Найдите активные расширенные события или трассировки профилировщика SQL Server, особенно с фильтрацией по текстовым столбцам (имя базы данных, имя входа, текст запроса и т. д.). Если это возможно, отключите трассировки и убедитесь, что производительность запросов улучшается. В зависимости от выбранного события каждый поток может использовать дополнительный ЦП, вызывающий общую медленность. Сведения о том, как определить активные трассировки расширенных событий, см. в разделе sys.dm_xe_sessions и для трассировок Профилировщика, см. в разделе sys.traces.

SELECT * FROM sys.dm_xe_sessions
GO
SELECT * FROM sys.traces