web-dev-qa-db-fra.com

High Pagelatch_ * et Writelog attend. Sont-ils liés?

Nous voyons des types de pagelatch_ex et de pagelatch_sh très hauts avec des attentes High Writelog. J'ai diagnostiqué la requête causant la pagélatch attend et peut les éliminer en réduisant la fréquence d'insertion dans une clé primaire plate-t-elle bien définie avec une valeur d'identité. Je comprends que ce phénomène est connu sous la nomination de la dernière page d'insertion de la page.

Cependant, ma question se pose lorsqu'un nouvel enregistrement est inséré, SQL Server prend-il un pagelatch_ex exclusif sur une page tampon, insérez l'enregistrement sur la page tampon, Écrivez l'enregistrement sur le journal de transaction puis publier l'exclusivement pagelatch_ex comme détaillé https://www.microsoft.com/en-ie/download/details.aspx?id=26665 Page 24. Ou Écrivez l'enregistrement sur le journal de transaction avant de prendre le pagelatch_ex comme étant détaillé "Résolution de la conflit de pagèle sur" Insertion de travail d'insertion hautement simultanée - Informations sur l'arrière-plan Guide de SQLCAT sur: moteur relationnel

Si l'enregistrement est écrit pour vous connecter à l'extérieur du mécanisme de verrouillage, je peux exclure les écritures lentes sur le disque en tant que cause d'attente de pagélatch élevée. Mais si le loquet est maintenu jusqu'à ce que l'enregistrement soit durci pour se connecter, je devrais probablement prendre en compte l'écrasement.

Devrait également avoir plusieurs index non clusters causant le loquet Pagelatch_ * à maintenir plus longtemps, si une table dispose d'index en cluster et de multiples non en cluster sont des verrous ajoutés et libérés dans chacune des pages de mémoire tampon d'index simultanément?

Mise à jour 1 Après la lecture confio-SQL-Server-WritElog-Wait Deux Deux et General Wal Architecture. Je comprends maintenant que "enregistrer une entrée de journal que la ligne a été modifiée", détaillée dans les deux papiers blancs se réfère à SQL Server de connecter une modification du cache du journal de transaction, non de disque. Une fois la transaction terminée ou la mémoire tampon, tous les enregistrements sont immédiatement rougés sur le disque.

11
Pixelated

Cependant, ma question se pose lorsqu'un nouvel enregistrement est inséré, SQL Server prend-il une page exclusive PAGELATCH_EX sur une page tampon, insérez l'enregistrement sur la page tampon, écrivez l'enregistrement sur le journal des transactions, puis publiez l'exclusivité Pagelatch_ex

Vous devez noter que le loquet protège uniquement l'intégrité physique de la page pendant qu'elle est en mémoire de sorte que la verrou soit prise lorsque la page est en mémoire. Supposons qu'un enregistrement soit inséré et que cette page doit être récupérée. Premièrement, la page serait verrouillée et mise en mémoire alors qu'elle serait verrouillée et que des informations seraient écrites. Le processus après ce serait

  • Générer un enregistrement de journal

  • Mettre à jour la page LSN pour correspondre à celle de l'enregistrement de journal

  • Modifier les données (sale la page)

  • Loquet

  • Commettre la transaction de départ

  • Flushtolsn de commettre

  • Libérez les serrures

  • Commettre la transaction complète

Pour plus de détails et d'explications sur les étapes ci-dessus, veuillez lire Blog de présentation d'E/S de Bob Dorr's

Pagelatch * attend des attentes non des E/S et j'ai vu la plupart du temps que ces attentes sont importantes en raison de la conflit d'allocation. Mon hunch est que cela doit faire quelque chose avec comment tempdb is configured. Alors, comment votre TEMPDB est-il configuré?, Combien de fichiers de données tempdb sont présents? Assurez-vous Ils ont le même autogrotthe et la même taille. Lorsque la nouvelle page est créée des pages système telles que pages GAM, SGAM et PFS doit être mise à jour ou accessible et lorsque SQL Server trouve la conflit d'accéder à ces pages, une telle attente constate en image.

1
Shanky