Comment dois-je interpréter le «temps de verrouillage» dans le journal des requêtes lentes mysql?

12

J'essaie de comprendre comment interpréter au mieux le temps de verrouillage pour les requêtes qui apparaissent sur notre journal de requêtes lentes MySQL.

Par exemple, si une requête UPDATE a un temps de verrouillage de 10 secondes. Je suppose que c'est le temps total après que la requête de mise à jour ait acquis le verrou. Même si elle attend que les requêtes de sélection précédentes se terminent mais n'exécute pas l'action UPDATE elle-même, l'horloge doit tourner car elle verrouille toutes les requêtes SELECT qui se sont alignées après la requête UPDATE.

Et que diriez-vous des verrous de requête SELECT. Comment se fait-il que certaines requêtes aient des temps de verrouillage? Est-ce parce qu'il y a une requête UPDATE qui suit donc ils verrouillent une table ensemble.

Haluk
la source

Réponses:

19

Le lock_timejournal des requêtes lentes correspond en fait à la durée pendant laquelle la requête a attendu pour obtenir le verrou dont elle a besoin pour s'exécuter. Par exemple, les UPDATESrequêtes nécessitent un verrou en écriture.

Le verrouillage dépend également du moteur de stockage que vous utilisez dans le tableau. Lors de l'écriture, InnoDB utilisera le verrouillage au niveau des lignes et ne verrouillera que les lignes en cours de modification. MyISAM verrouillera la table entière jusqu'à la fin de la mise à jour / insertion / suppression.

Le verrouillage de la table entière pour MyISAM est une raison importante pour laquelle les SELECTrequêtes auront un lock_time dans votre journal de requêtes lent.

Derek Downey
la source