229
7.4 Attentes
avons introduit ici, pour l’exemple, une petite perversion : la deuxième requête ne
serait pas en attente si l’indicateur de table WITH (TABLOCK) ne forçait un verrou à la
granularité de table. Comme la transaction du spid 52 a posé un verrou d’intention
exclusif sur la table Currency, le spid 53 ne peut poser de verrou partagé sur cet objet.
Au passage, nous voyons aussi, sur la figure 7.5, que deux pages sont verrouillées
par le spid 52. Pourquoi deux pages, alors que nous devons modifier une seule ligne ?
Vérifions :
DBCC TRACEON (3604)
DBCC PAGE (AdventureWorks, 1, 295, 0)
DBCC PAGE (AdventureWorks, 1, 2101, 0)
L’en-tête de la page 295 nous montre ceci : Metadata: ObjectId = 597577167 …
Metadata: IndexId = 1, et l’en-tête de la page 2101 : Metadata: ObjectId =
597577167 … Metadata: IndexId = 2. Il s’agit bien sûr du verrouillage d’une page par
index : l’index clustered de la table (IndexId = 1), et de l’index nonclustered sur la
colonne Name (IndexId = 2), que nous sommes en train de modifier.
Types d’attentes
Pour référence, nous listons ici les types d’attentes que vous rencontrerez le plus
souvent, et qui peuvent vous aider à détecter des problèmes. Ces attentes sont visibles dans la colonne wait_type des vues de gestion dynamique
sys.dm_os_wait_stats et sys.dm_os_waiting_tasks.
Une liste exhaustive est donnée dans l’excellent document « SQL Server 2005
Waits and Queues », à l’adresse http://www.microsoft.com/technet/prodtechnol/sql/
bestpractice/performance_tuning_waits_queues.mspx
• ASYNC_NETWORK_IO – « bufferisation » d’une session TCP, souvent à cause d’un
client qui met du temps à traiter l’envoi de SQL Server, ou qui maintient
ouvert un jeu de résultat. Le compteur de performance MSSQL:Wait statistics\Network IO waits est aussi utile pour ce type de diagnostic.
• CXPACKET – échange entre des threads parallélisés sur la même requête. Peut
indiquer un problème lié au parallélisme. Si vous avez beaucoup d’attentes de
ce type, désactivez le parallélisme.
• LCK_... - attentes sur des verrous, voir l’encadré pour une surveillance par
compteurs de performances.
• LOGBUFFER et WRITELOG – écriture et lecture des journaux de transaction.
• LOGMGR_RESERVE_APPEND – attente de troncature pour vérifier si la libération
d’espace dans le journal sera suffisante pour écrire l’enregistrement actuel.
C’est un signe de lenteur de disque, sur des journaux en mode de récupération
simple.
• PAGEIOLATCH – attentes sur des synchronisations entre les pages du buffer et les
pages du disque, bon indicateur de contention disque.
Précédent

- 241/334

Suivant