Що таке тип очікування PAGEIOLATCH_SH у SQL Server?


96

У мене є запит, який займає багато часу в середині транзакції. Коли я отримую wait_typeпроцес, це PAGEIOLATCH_SH.

Що означає цей тип очікування і як це можна вирішити?

Відповіді:


116

З документації Microsoft :

PAGEIOLATCH_SH

Виникає, коли завдання чекає на засувці буфера, який є у I/Oзапиті. Запит на фіксацію знаходиться у спільному режимі. Тривале очікування може свідчити про проблеми з дисковою підсистемою.

На практиці це майже завжди відбувається через великі сканування великих столів. Це майже ніколи не трапляється в запитах, які ефективно використовують індекси.

Якщо ваш запит такий:

Select * from <table> where <col1> = <value> order by <PrimaryKey>

, переконайтеся, що у вас складений індекс (col1, col_primary_key).

Якщо у вас його немає, вам знадобиться або повний, INDEX SCANякщо PRIMARY KEYвибрано, або SORTякщо col1вибрано індекс на .

Обидва вони I/Oвимагають великих операцій на великих таблицях.


Це справді простий запит. Виберіть * із <таблиці> де <col1> = <значення> упорядкувати за <PrimaryKey>. У нас також є індекс на просто col1 і ми спробували відновити його.
Райан

Чи можете ви запропонувати деякі ресурси для вивчення того, що ви розумієте, що вимагає диску, що вимагає повного сканування індексу, що вимагає сортування тощо
Грег Б

1
@GregB: якщо ти вже маєш базові знання SQL, ти міг би прочитати книги Джо Селка (усі, але особливо SQL for Smartiesі Thinking in Sets) та мій щоденник, звичайно :)
Квасно

3
Це вказувало на помилку в нашій дисковій підсистемі. Не вдався RAID-диск, не запустивши систему моніторингу. Перевірка журналів подій виявила, що SMART дійсно позначив диск як поганий.
Гомібуші

7

PAGEIOLATCH_SH тип очікування зазвичай з’являється в результаті фрагментованого або неоптимізованого індексу.

Часто причинами надмірного PAGEIOLATCH_SHочікування є:

  • Підсистема вводу-виводу має проблему або неправильно налаштована
  • Перевантажена підсистема вводу-виводу іншими процесами, що забезпечують високу активність вводу-виводу
  • Погане управління індексом
  • Помилка логічного чи фізичного диска
  • Проблеми з мережею / затримка
  • Тиск пам'яті
  • Синхронне дзеркальне відображення та AlwaysOn AG

Для того, щоб спробувати вирішити проблему високого PAGEIOLATCH_SHочікування, ви можете перевірити:

  • SQL Server, запити та індекси, оскільки дуже часто це може бути першопричиною надмірних PAGEIOLATCH_SHтипів очікування
  • Для тиску пам’яті перед переходом до будь-якого способу усунення несправностей підсистеми вводу-виводу

Завжди майте на увазі, що у випадку високої безпеки Дзеркального відображення або наявності синхронних комітів в AlwaysOn AG PAGEIOLATCH_SHможна очікувати збільшення / надмірності .

Детальніше про цю тему можна знайти в статті Обробка надмірних типів очікування SQL Server PAGEIOLATCH_SH

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.