MSSQLSERVER_833

Применимо к:SQL Server Управляемый экземпляр SQL Azure

Сведения

Атрибут Значение
Название продукта SQL Server
ИД события 833
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя BUF_LONG_IO
Текст сообщения SQL Server обнаружил запросы ввода-вывода (%d), занявшие более %d с, для завершения обработки файла [%ls] в базе данных [%ls] (%d). Дескриптором файла ОС является 0x%p. Смещение последней длительной операции ввода-вывода: %#016I64x.

Описание

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

  • Неисправное оборудование
  • Неправильно настроенное оборудование
  • Параметры встроенного ПО
  • Фильтры драйверов
  • Сжатие
  • Ошибки
  • Другие условия в пути ввода-вывода

Эти проблемы ввода-вывода могут привести к возникновению следующего поведения:

  • Блокировки.
  • Конфликты с блокировкой и время ожидания.
  • Низкое время отклика.
  • Растяжение границ ресурсов.
  • Вы также можете заметить другие симптомы, связанные с этим сообщением, например:
    • Большое время ожидания для PAGEIOLATCH ожидает.
    • Предупреждения или ошибки в системном журнале событий.
    • Сведения о проблемах с задержкой диска в счетчиках системного монитора.

При ожидании операции ввода-вывода в течение 15 секунд или более поздней версии SQL Server выполняет следующие действия:

  1. Обнаруживает, что операция ожидалась.

  2. Записывает информационное сообщение в журнал ошибок SQL Server, как описано в разделе "Сведения".

    Описание различных разделов этого информационного сообщения приведено в следующей таблице:

Текст сообщения Description
<Числового> вхождения Количество запросов ввода-вывода, которые не завершили операцию чтения или записи менее чем за 15 секунд.
Сведения о файле Полное имя файла, имя базы данных и идентификатор базы данных (DBID).
Handle Дескриптор операционной системы файла. Вы можете использовать дескриптор операционной системы с отладчиками или другими служебными программами, чтобы отслеживать запросы пакетов запросов ввода-вывода (IRP).
Смещение Смещение последней застрявшей операции ввода-вывода или последней остановленной операции ввода-вывода. Смещение можно использовать с отладчиками или другими служебными программами для отслеживания запросов IRP.

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

Возможные причины

Информационное сообщение указывает, что текущая нагрузка может возникнуть в одном из следующих условий:

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

SQL Server записывает время, когда он инициировал запрос ввода-вывода и записывает время завершения ввода-вывода. Если разница составляет более 15 секунд, это указывает на проблему. Это также означает, что SQL Server не является причиной отложенного условия ввода-вывода, описываемого этим сообщением и отчетами. Это условие называется остановленным вводом-выводом. Длительность выполнения большинства запросов к диску соответствует обычной скорости диска. Эта типичная скорость диска часто называется временем поиска диска. и для большинства стандартных дисков он составляет до 10 миллисекунд. Таким образом, 15 секунд — это длительное время для возврата системного ввода-вывода в SQL Server. Дополнительные сведения см. в разделе "Дополнительные сведения ".

Действие пользователя

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

  1. Проверьте журнал событий системы для сообщений об ошибках, связанных с оборудованием.
  2. Проверьте журналы, относящиеся к оборудованию, если они доступны. Используйте необходимые методы и методы, чтобы определить причину задержки в операционной системе, драйверах или оборудовании ввода-вывода.
  3. Обновите все драйверы устройств и встроенное ПО или выполните другие диагностика, связанные с подсистемой ввода-вывода.
  4. Доступ к диску можно замедлить с помощью драйверов фильтров, например антивирусной программы. Чтобы увеличить скорость доступа, исключите файлы данных SQL Server, указанные в сообщении об ошибке, из активных проверок вирусов. Дополнительные сведения см. в статье "Выбор антивирусного программного обеспечения для запуска на компьютерах с SQL Server (microsoft.com)".
    • Используйте служебную программу командной строки fltmc.exe для запроса всех драйверов фильтров, установленных в системе, и для понимания функций, которые она выполняет в пути к хранилищу файлов базы данных.
  5. Используйте Монитор производительности для проверки следующих счетчиков:
    • Среднее время обращения к диску (сек)
    • Средняя длина очереди диска
    • Текущая длина очереди диска
  6. Вы также можете использовать такие средства, как ведение журнала Storport ETW, чтобы оценить задержку запросов, сделанных на единицу диска. Другое аналогичное средство устранения неполадок с дисковым вводом-выводом — встроенный профиль Windows Performance Recorder.
  7. Отслеживайте sys.dm_io_virtual_file_stats и выберите соответствующий уровень хранилища и количество операций ввода-вывода в секунду для пропускной способности хранилища.

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

Дополнительные сведения

Застрял в режиме ввода-вывода и застопорился ввода-вывода

Зависание ввода-вывода

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

  • Неисправное оборудование.
  • Ошибка в компоненте пути ввода-вывода.

Остановленный ввод-вывод

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

  • Конфигурация оборудования.
  • Параметры встроенного ПО.
  • Проблема с драйвером фильтра, требующая помощи от оборудования или поставщика программного обеспечения для трассировки и устранения.

SQL Server застопорил ввод-вывод и застрял запись ввода-вывода и отчеты

Поддержка SQL Server обрабатывает множество случаев каждый год, в результате которых возникают проблемы с зависанием или остановкой ввода-вывода. Эти проблемы ввода-вывода отображаются разными способами. Проблемы ввода-вывода являются одними из самых сложных для диагностики и отладки, и они требуют значительного времени и ресурсов для отладки от Корпорации Майкрософт и клиента. Отчеты и запись запросов ввода-вывода предназначены для каждого файла. Обнаружение и отчеты о заблокированных и застрявших запросах ввода-вывода являются двумя отдельными действиями.

Запись

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

Отчеты

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

Пороговое значение 15 секунд не настраивается. Однако вы можете отключить обнаружение заблокированных или застрявших операций ввода-вывода с помощью флага трассировки 830, хотя мы не рекомендуем это сделать.

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

    dbcc traceon(830, -1)

Этот параметр действует только для всего процесса SQL Server.

Примечание.

Запрос ввода-вывода, который зависает или зависает, сообщается только один раз. Например, если сообщение сообщает, что 10 запросов ввода-вывода остановлены, эти 10 отчетов не будут повторяться. Если следующее сообщение сообщает о том, что 15 запросов ввода-вывода остановлены, это означает, что 15 новых запросов ввода-вывода были застопорились.

Отслеживание пакета запросов ввода-вывода (IRP)

SQL Server использует стандартные вызовы API Microsoft Windows для чтения и записи данных. Например, SQL Server использует следующие функции:

  • WriteFile
  • ReadFile
  • WriteFileScatter
  • ReadFileGather

Запрос на чтение или запись обрабатывается Windows как пакет запроса ввода-вывода (IRP). Чтобы определить состояние IRP, используйте обе следующие функции:

Мы рекомендуем проверка для всех доступных обновлений для следующих элементов:

  • The BIOS
  • Встроенное ПО
  • Любые другие компоненты пути ввода-вывода

Перед выполнением дополнительных действий отладки обратитесь к поставщикам оборудования. Сеанс отладки, скорее всего, будет включать сторонний драйвер, встроенное ПО или компонент драйвера фильтра.

Действия плана производительности системы и запросов

В целом производительность системы может играть ключевую роль в обработке ввода-вывода. При изучении отчетов о заблокированных операциях ввода-вывода следует рассмотреть общую работоспособность системы. Чрезмерные нагрузки могут привести к замедлению общей системы, включая обработку ввода-вывода. Поведение системы, когда возникает проблема, может быть ключевым фактором в определении первопричины проблемы. Например, если загрузка ЦП увеличивается или остается высокой во время возникновения проблемы, это может указывать на то, что системный процесс использует так много ЦП, что другие процессы оказывают негативное влияние.

Счетчики производительности

Чтобы отслеживать производительность ввода-вывода, изучите следующие счетчики производительности для определенных сведений о пути ввода-вывода:

  • Среднее время обращения к диску (сек)
  • Средняя длина очереди диска
  • Текущая длина очереди диска

Например, среднее время передачи диска на компьютере под управлением SQL Server обычно меньше 15 миллисекунда. Если среднее значение диска с/передачи поднимается, это означает, что подсистема ввода-вывода не оптимально соответствует требованию ввода-вывода.

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

В системном мониторе Windows можно просмотреть счетчик "Физический диск: байты диска/с" для каждого затронутого диска и сравнить скорость действий со счетчиками "Обработка: данные ввода-вывода в секунду" и "Процесс: операции: другие байты в секунду" для каждого процесса. Это позволяет определить, создает ли определенный набор процессов чрезмерные запросы ввода-вывода. Различные другие счетчики ввода-вывода в объекте Process показывают более подробную информацию. Если вы определяете, что экземпляр SQL Server отвечает за чрезмерную нагрузку ввода-вывода на сервере, см. следующий раздел о индексах и параллелизме. Подробные сведения об обнаружении и устранении узких мест ввода-вывода см. в статье "Устранение проблем с медленной производительностью SQL Server", вызванной проблемами ввода-вывода.

Индексы и параллелизм

Часто возникают всплески ввода-вывода из-за отсутствия индекса. Это поведение может серьезно отправить путь ввода-вывода. Проход, использующий мастер поворота индекса (ITW), может помочь устранить давление ввода-вывода в системе. Если запрос выигрывает от индекса вместо сканирования таблицы, или, возможно, если он использует сортировку или хэш, система может получить следующие преимущества:

  • Сокращение выполняется в физическом вводе-выводе, необходимом для выполнения действия, которое непосредственно создает преимущества производительности для запроса.
  • Необходимо перевернуть меньше страниц в кэше данных. Поэтому те страницы, которые находятся в кэше данных, остаются актуальными для активных запросов.
  • Сортировки и хэши используются из-за отсутствия индекса или из-за того, что статистика устарела. Вы можете уменьшить использование и спор tempdb, добавив один или несколько индексов.
  • Сокращение выполняется в ресурсах, параллельных операциях или обоих. Так как SQL Server не гарантирует параллельное выполнение запросов, а нагрузка на систему считается, рекомендуется оптимизировать все запросы для последовательного выполнения. Чтобы оптимизировать запрос, откройте анализатор запросов и задайте значение sp_configure максимального значения параллелизма 1. Если все запросы настроены на быстрое выполнение в качестве последовательной операции, параллельное выполнение часто является лучшим результатом. Однако параллельное выполнение часто выбирается из-за большого объема данных. Для отсутствующих индексов может потребоваться большой сортировки. Несколько рабочих ролей, выполняющих операцию сортировки, создадут более быстрый ответ. Однако это действие может резко увеличить давление на систему. Большие запросы на чтение от многих рабочих ролей могут привести к увеличению объема операций ввода-вывода вместе с увеличением использования ЦП. Запрос часто можно настроить на более быстрый запуск и использовать меньше ресурсов, если индекс добавляется или происходит другое действие настройки.

Практические примеры поддержки SQL Server

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

Пример 1. Запись журнала, зависающая в течение 45 секунд

Попытка написать файл журнала SQL Server периодически зависает примерно на 45 секунд. Запись журнала не выполняется своевременно. Это поведение создает условие блокировки, которое приводит к истечении 30 секунд времени ожидания клиента.

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

Дополнительные сведения об обработке и блокировке транзакций см. в следующей статье базы знаний Майкрософт: 224453 Понимание и устранение проблем с блокировкой SQL Server

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

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

Решение

Проблема отслеживается до застрявшего запроса ввода-вывода в драйвере адаптера шины узла (HBA). На компьютере есть несколько карта HBA с поддержкой отработки отказа. Если один HBA находится за пределами или не взаимодействует с сетью служба хранилища области (SAN), значение времени ожидания повтора перед отработкой отказа настроено на 45 секунд. При превышении времени ожидания запрос ввода-вывода направляется во второй HBA. Второй HBA обрабатывает запрос и быстро завершает работу. Чтобы предотвратить такие условия остановки, изготовитель оборудования рекомендует установить параметр "повтор перед отработкой отказа" за пять секунд.

Пример 2. Вмешательство драйвера фильтра

Многие антивирусные программы и продукты резервного копирования используют драйверы фильтров ввода-вывода. Эти драйверы фильтров ввода-вывода становятся частью стека запросов ввода-вывода и имеют доступ к запросу IRP. Службы поддержки продуктов Майкрософт видели различные проблемы, связанные с ошибками, которые создают зависшие условия ввода-вывода или застопорили условия ввода-вывода в реализации драйвера фильтра.

Одним из таких условий является драйвер фильтра для обработки резервных копий, который позволяет создавать резервные копии файлов, открытых при выполнении резервного копирования. Системный администратор включил каталог файлов данных SQL Server в выборку резервного копирования файлов. При выполнении резервного копирования резервная копия пытается собрать правильный образ файла во время запуска резервного копирования. Это задерживает запросы ввода-вывода. Запросы ввода-вывода могут выполняться только один раз, так как программное обеспечение обрабатывает их.

При запуске резервного копирования производительность SQL Server резко снижается, так как операции ввода-вывода SQL Server вынуждены выполняться одновременно. Одна из логики во время заключается в том, что операция ввода-вывода не может выполняться асинхронно, что приводит к возникновению проблемы. Поэтому, когда SQL Server ожидает публикации запроса ввода-вывода и продолжения, рабочий процесс зависает в вызове чтения или записи до завершения запроса ввода-вывода. Действия драйвера фильтра эффективно отключают такие задачи обработки, как SQL Server перед чтением. Кроме того, другая ошибка в драйвере фильтра оставляет один раз в процессе действия, даже когда резервная копия завершена. Единственный способ восстановить производительность SQL Server — перезапустить SQL Server, чтобы дескриптор файла был освобожден и повторно запрашивался без взаимодействия драйвера фильтра.

Решение

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

Пример 3. Скрытые ошибки

Многие высокоуровневые системы имеют многоканальные пути ввода-вывода для обработки балансировки нагрузки или аналогичных действий. Служба поддержки продуктов Майкрософт обнаружила проблемы с программным обеспечением балансировки нагрузки, в котором сбой запроса ввода-вывода, но программное обеспечение не обрабатывает условие ошибки правильно. Программное обеспечение может попытаться выполнить бесконечные повторные попытки. Операция ввода-вывода зависает, и SQL Server не может выполнить указанное действие. Как и условие записи журнала, описанное ранее, многие плохие системные поведения могут возникать после того, как такое условие клинует систему.

Решение

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

Пример 4. Удаленное хранилище, зеркало и диски рейдов

Многие системы используют зеркало или применяют аналогичные шаги, чтобы предотвратить потерю данных. Некоторые системы, использующие зеркало, основаны на программном обеспечении, и некоторые из них основаны на оборудовании. Ситуация, которая обычно обнаруживается служба поддержки Майкрософт для этих систем, увеличивает задержку.

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

Решение

Строгие параметры конфигурации необходимы для уменьшения задержки в зеркало или для операций перестроения рейдов.

Пример 5. Сжатие

Корпорация Майкрософт не поддерживает файлы данных SQL Server и файлы журналов на сжатых дисках. Сжатие NTFS не является безопасным для SQL Server, так как протокол NTFS-сжатия прерывает запись в журнале (WAL). Сжатие NTFS также требует повышенной обработки для каждой операции ввода-вывода. Сжатие создает такое поведение, как поведение, которое приводит к возникновению серьезных проблем с производительностью.

Решение

Чтобы устранить эту проблему, распаковка данных и файлов журналов.

Дополнительные сведения см. в разделе "Поддержка баз данных в сжатых томах".

Дополнительные точки данных

PAGEIOLATCH_* и ожиданий записи в sys.dm_os_wait_stats динамических административных представлений (DMV) являются ключевыми индикаторами для изучения производительности пути ввода-вывода. Если вы видите значительные ожидания PAGEIOLATCH, это означает, что SQL Server ожидает подсистему ввода-вывода. Определенное количество ожиданий PAGEIOLATCH является типичным и ожидаемым поведением. Однако если среднее время ожидания PAGEIOLATCH постоянно превышает 10 миллисекундах, следует изучить, почему подсистема ввода-вывода находится под давлением. Дополнительные сведения см. в следующих документах:

Ссылки

SQL Server требует, чтобы системы поддерживали "гарантированную доставку в стабильный носитель", как описано в соответствии с требованиями программы надежности операций ввода-вывода SQL Server. Дополнительные сведения о требованиях к входным и выходным данным ядра СУБД SQL Server см. в ядро СУБД требования к входным и выходным данным.

Дополнительные сведения об ошибках ввода-вывода см. в главе 2 документации Майкрософт об основных операциях ввода-вывода в SQL Server.