Published on

June 27, 2016

Понимание типа ожидания PAGEIOLATCH_SH в SQL Server

Один из самых распространенных типов ожидания, наблюдаемых в SQL Server и часто вызывающих проблемы для менее опытных администраторов баз данных, – это тип ожидания PAGEIOLATCH_SH. Этот тип ожидания указывает на то, что задача ожидает латча для буфера, который находится в запросе ввода-вывода (I/O). Запрос латча выполняется в режиме разделения, и длительные ожидания могут указывать на проблемы с подсистемой дисков.

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

Латчи страниц – это легкие блокировки, устанавливаемые внутренними процессами SQL Server в качестве способа управления доступом к буферу памяти. Они устанавливаются каждый раз, когда SQL Server должен физически считать данные из буфера памяти на жесткий диск или с жесткого диска в буфер памяти, и поток должен ждать, пока это завершится, вызывая ожидания PAGEIOLATCH_XX. Как только запрошенные страницы данных становятся доступными после завершения операции чтения I/O, поток получит запрошенные данные и продолжит выполнение. Таким образом, нормально сталкиваться с некоторыми ожиданиями PAGEIOLATCH_SH.

Хотя тип ожидания PAGEIOLATCH_SH напрямую связан с подсистемой ввода-вывода, это не всегда означает, что подсистема ввода-вывода является основной или единственной причиной проблемы. Чрезмерные ожидания PAGEIOLATCH_SH также могут указывать на то, что подсистема ввода-вывода не может справиться с избыточным вводом-выводом, наложенным на нее.

Существует несколько потенциальных причин высоких ожиданий PAGEIOLATCH_SH:

  • Проблема или неправильная конфигурация подсистемы ввода-вывода
  • Неправильное понимание логического/физического диска
  • Проблемы с сетью/задержкой сети
  • Перегруженная подсистема ввода-вывода другим процессом
  • Нехватка памяти
  • Синхронное зеркалирование и AlwaysOn AG
  • Плохое управление индексами

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

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.