Pourquoi le verrouillage de table mieux que le verrouillage de ligne pour les grandes tables?

StackOverflow https://stackoverflow.com/questions/3462643

  •  27-09-2019
  •  | 
  •  

Question

Selon le MySQL manuel:

  

Pour les grandes tables, le verrouillage de table est souvent mieux que le verrouillage de ligne,

Pourquoi est-ce? Je suppose que le verrouillage de ligne est mieux parce que lorsque vous verrouillez sur une table plus grande, vous verrouillage plus de données.

Était-ce utile?

La solution

de la (pré-édition) lien

  

Plus lent que les verrous de page ou de niveau de table lorsqu'il est utilisé sur une grande partie de la table parce que vous devez acquérir plusieurs verrous

utiliser un verrou de niveau ligne si vous ne frappez une ligne ou deux. Si votre code frappe plusieurs lignes ou inconnus, bâton avec verrou de table.

Autres conseils

  • verrouillage de ligne a besoin de plus de mémoire que le verrouillage de table ou au niveau de la page.

  • DEVONS plusieurs verrous avec verrouillage de ligne, qui consacre plus de ressources

De http://www.devshed.com/ c / a / MySQL / MySQL-optimisation-part-2 /

  • Avantages de verrouillage de ligne:

    • Moins de conflits de verrouillage lors de l'accès différentes lignes dans plusieurs threads.
    • Moins de changements pour rollbacks.
    • Permet de verrouiller une seule ligne depuis longtemps.
  • Inconvénients de verrouillage de ligne:

    • prend plus de mémoire que de page ou des verrous de niveau de table.
    • est plus lent que les verrous de page ou de niveau de table lorsqu'il est utilisé sur une grande partie de la table parce que vous devez acquérir plusieurs verrous.
    • est certainement bien pire que les autres serrures si vous le faites souvent GROUP BY sur une grande partie des données ou si vous devez souvent scanner toute la table.
    • Avec les verrous de niveau supérieur, vous pouvez également soutenir plus facilement les serrures de différents types, pour optimiser l'application, car la serrure est en tête inférieure à celle des verrous de niveau ligne.
  • Tableau verrous sont supérieurs aux verrous de page ou au niveau des lignes dans les cas suivants:

    • La plupart des déclarations de la table sont lit.
    • Lire et mises à jour sur les clés strictes, où vous mettez à jour ou supprimer une ligne qui peut être tiré par les cheveux avec une seule clé lire: UPDATE tbl_name SET column=value WHERE unique_key_col=key_value; DELETE FROM tbl_name WHERE unique_key_col=key_value;
    • SELECT combiné avec INSERT simultanés, et très peu UPDATE et DELETE.
    • De nombreux scans GROUP BY sur la table sans aucune écriture.

ligne Tableau de verrouillage de niveau est meilleur pour une grande table où des modifications importantes de données sont en cours. Cela permet au système avec une serrure soutiennent unique sur la table plutôt que d'avoir à traiter avec des serrures gazillion (un pour chaque ligne).

Les SGBDR dégénère automatiquement le verrouillage à l'intérieur des niveaux.

  

verrouillage de table permet à de nombreuses séances de lecture en même temps d'une table

     

Pour atteindre une vitesse de verrouillage très élevé, MySQL utilise le verrouillage de table

« Je suppose que le verrouillage de ligne est meilleure parce que » [vous verrouillez moins de données].

D'abord « mieux » est mal défini dans cette page. Il semble que les meilleurs moyens « plus rapide ».

verrouillage de ligne ne peut pas (en général) plus rapide en raison de contention pour les serrures. Le verrouillage de chaque rangée d'un grand jeu de résultats signifie la possibilité très réelle d'un conflit avec une autre grande requête de jeu de résultats et un retour en arrière.

En général, si vous avez besoin de verrouiller un grand nombre de données puis 1 verrou sur une grande table est moins cher qu'un tas de niveau de ligne ou de verrous de page

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top