Qu'est-ce que pageiolatch SH wait type dans SQL Server?
J'ai une requête qui prend beaucoup de temps dans le milieu d'une transaction. Quand je reçois le wait_type
il est PAGEIOLATCH_SH
.
Que signifie ce type d'attente et comment cela peut-il être résolu?
2 réponses
De MSDN:
PAGEIOLATCH_SH
Se produit lorsqu'une tâche attend sur un loquet un tampon qui se trouve dans une requête
I/O
. La requête de verrouillage est en mode partagé. De longues attentes peuvent indiquer des problèmes avec le sous-système de disque.
En pratique, cela se produit presque toujours en raison de grandes analyses sur de grandes tables. Cela n'arrive 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 avoir un indice composite sur (col1, col_primary_key)
.
Si vous n'en avez pas, alors vous aurez besoin d'un plein INDEX SCAN
si le PRIMARY KEY
est choisi, ou un SORT
, si un index sur col1
est choisi.
Les deux sont très disk I/O
consommant des opérations sur de grandes tables.
PAGEIOLATCH_SH
le type d'attente apparaît généralement à la suite d'un index fragmenté ou non optimisé.
Souvent, les raisons d'un type d'attente PAGEIOLATCH_SH
excessif sont:
- 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 qui produisent l'activité d'E/S élevée
- mauvaise gestion de l'index
- lecteur logique ou physique idée fausse
- problèmes 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, car très souvent cela pourrait être trouvé comme une cause profonde des types d'attente
PAGEIOLATCH_SH
excessifs - pour la pression de la mémoire avant de sauter dans un sous-système d'e/s dépannage
Gardez toujours à l'esprit qu'en cas de mise en miroir de sécurité élevée ou de disponibilité de validation synchrone dans AlwaysOn AG, une augmentation/excessive PAGEIOLATCH_SH
peut être devrait.
Vous trouverez plus de détails sur ce sujet dans l'article gestion excessive des types D'attente SQL Server PAGEIOLATCH_SH