web-dev-qa-db-fra.com

Qu'est-ce que le type d'attente PAGEIOLATCH_SH dans SQL Server?

J'ai une requête qui prend beaucoup de temps au milieu d'une transaction. Quand j'aurai le wait_type du processus c'est PAGEIOLATCH_SH.

Qu'est-ce que ce type d'attente signifie et comment cela peut-il être résolu?

92
Ryan

De [~ # ~] msdn [~ # ~] :

PAGEIOLATCH_SH

Se produit lorsqu'une tâche attend un verrou pour un tampon se trouvant dans un I/O demande. La demande de verrouillage est en mode partagé. De longues attentes peuvent indiquer des problèmes avec le sous-système de disque.

Dans la pratique, cela se produit presque toujours à cause de grands balayages sur de grandes tables. Cela ne se produit presque jamais dans les requêtes qui utilisent efficacement les index.

Si votre requête est comme ceci:

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

, vérifiez que vous avez un index composite sur (col1, col_primary_key).

Si vous n'en avez pas, alors vous aurez besoin d'un INDEX SCAN si la PRIMARY KEY est choisi, ou SORT si un index sur col1 est choisi.

Les deux d'entre eux sont très disque I/O opérations gourmandes sur de grandes tables.

112
Quassnoi

Le type d'attente PAGEIOLATCH_SH Apparaît généralement à la suite d'un index fragmenté ou non optimisé.

Les raisons du type d'attente excessive PAGEIOLATCH_SH Sont les suivantes:

  • Le sous-système d'E/S a un problème ou est mal configuré
  • Sous-système d'E/S surchargé par d'autres processus produisant une activité d'E/S élevée
  • Mauvaise gestion d'index
  • Idée fausse d'un lecteur physique ou logique
  • Problèmes de réseau/latence
  • Pression de la mémoire
  • Mise en miroir synchrone et AlwaysOn AG

Afin d'essayer de résoudre le type d'attente élevé PAGEIOLATCH_SH, Vous pouvez vérifier:

  • SQL Server, requêtes et index, comme cela peut souvent être trouvé comme cause première des types d'attente excessifs PAGEIOLATCH_SH
  • Pour la pression de la mémoire avant de sauter dans un dépannage de sous-système d’E/S

Gardez toujours à l'esprit qu'en cas de sécurité élevée une disponibilité en miroir ou en validation synchrone dans AlwaysOn AG peut entraîner une augmentation/excessive PAGEIOLATCH_SH.

Vous trouverez plus de détails sur ce sujet dans l'article Gestion des types d'attente excessifs de SQL Server PAGEIOLATCH_SH

6
G.Hunt