Super résumé complet de verrouillage InnoDB

Les verrous partagés et verrous exclusifs, en fait, on dit souvent que les verrous de lecture et d'écriture. règles d'exclusion mutuelle entre eux, probablement savons tous, ne pas aller dans les détails. Mais une chose à noter, les verrous partagés et verrous exclusifs sont implémentation standard de verrouillage de ligne. Par exemple, en mode action pour sélectionner des déclarations ou verrouillage de l'application de mise à jour, ou mettre à jour un enregistrement, ainsi que tous les verrouillages niveau de la ligne.

Et au niveau des lignes et des verrous partagés verrous exclusifs comme, ainsi que la table niveau des verrous partagés et des verrous exclusifs. Comme LOCK TABLES ... ECRITURE / commandes de lecture, le verrouillage de table est atteint.

Serrures Intention

Dans InnoDB supporte la coexistence de verrouillage de granularité multiple, tels que des tables et des verrous de ligne. L'intention Locks - l'intention de verrouillage est de verrouillage de table. Et comme le verrouillage de ligne, verrou d'intention dans l'intention verrou partagé (IS) et l'intention verrou exclusif (IX). Il est intéressant, cependant, ne sont pas mutuellement exclusifs entre IS et IX, ce qui signifie que vous pouvez en même temps à autre transaction, plus . la compatibilité et IX comme suit:

Alors je doute, alors quel est le sens de l'existence Talia? Le rôle est, et des verrous partagés et verrous exclusifs sont mutuellement exclusifs. Notez ici fait référence au niveau de la table des verrous partagés et des verrous exclusifs rien à voir avec lui, et le niveau de la ligne!

Le site officiel pour expliquer ce passage:

Le but principal de serrures intention est de montrer que quelqu'un est verrouiller une ligne, ou va verrouiller une ligne dans la table.

Le but est de montrer qu'il ya transaction verrou d'intention est ou sera verrouillé dans une ligne de table. Imaginez un scénario, nous utilisons select * from t où id = 0 pour la mise à jour; id = 0 Cette ligne ajoutera un verrou d'écriture. On suppose en même temps, veut lancer une nouvelle opérations opération de verrouillage des tables ... verrou sur une table, puis, s'il n'y a pas l'intention de verrouillage, alors vous devez aller ligne par ligne pour détecter si une ligne où la table s'il y a un verrou d'écriture, qui constitue un conflit , l'efficacité est trop faible. Au lieu de verrouillage de l'intention, puis lancer verrouillage en mode action ou pour le verrouillage intention de pré-mise à jour ajoutera automatiquement tellement plus commode de les détecter.

Dans la pratique, la table de verrouillage manuel n'est pas commun, donc verrou d'intention est peu utilisée. Surtout après l'introduction de verrouillage MySQL LDM, résoudre le problème du conflit DML et DDL, verrouillage beaucoup moins l'intention d'être amené ici.

Serrures records

Serrure fiche, est souvent dit que le verrouillage de ligne. InnoDB, les tableaux présentent sous la forme d'un index, chaque index correspondant à un arbre B +, où la ligne est les verrous d'enregistrement d'index de B +. Mentionné précédemment verrous partagés et des verrous exclusifs, il est de verrouiller ici.

Serrures Gap

Gap Serrures, espace de verrouillage de verrouillage est l'écart entre l'enregistrement d'index, pour résoudre le problème de la lecture fantôme à introduire. Il est important de noter qu'il n'y a pas de conflit entre l'écart et le verrouillage écart se verrouille, et simplement d'insérer ce conflit.

verrou de clé

Serrure prochaine clé rangée de verrouillage (la fiche) et l'entrefer et régler le verrouillage. Aux termes de niveau RR, InnoDB utiliser les verrous prochaine clé recherche des arbres et des analyses index. Rappelez-vous ces mots, l'unité de base de serrures est le verrou de clé.

Haut

règles de verrouillage

Le principe de verrouillage code brosse résumé se compose de professeur Lin Xiaobin, dans la version en ligne est la suivante:

MySQL versions 5.x - 5.7.24, 8.0 - 8.0.13 5.7.27 j'ai trouvé aucun problème.

Les règles comprennent: deux « principes », deux « optimisation » et un « bug ».

Principe 1: L'unité de base de serrures est le verrou de clé. verrou de clé est ouverte et fermée avant et après l'intervalle.

Principe 2: Trouver des objets processus aura accès à la serrure.

Optimisation 1: équivalence requête sur l'index, le seul indice pour verrouiller quand, dégénérée de verrou de clé dans la serrure de la ligne.

Optimisation 2: requête d'équivalence sur l'indice, en traversant à droite et la dernière condition ne correspond pas à la valeur équivalente de temps, dégénéré de verrouillage de verrouillage de la clé suivante dans l'espace.

Un bug: la portée de l'enquête première valeur d'index unique ne satisfait pas aux conditions d'accès à ce jour.

Sous explication est facile à comprendre au mauvais endroit:

2 Description de l'optimisation:

Valeur initiale requête équivalente, traverse droit au premier enregistrement ne satisfait pas aux conditions de fin d'équivalence, la nouvelle clé ne remplit pas les conditions pour le blocage de la dégradation enregistrée l'écart.

requête équivalente et traversal Quelle est la relation?

En analysant le comportement de verrouillage, la structure de données doit commencer dès le début de l'index. Lors de l'enregistrement de l'indice situé par le mode de recherche d'arbre, utilisez la « requête équivalente », parcourt l'enregistrement correspondant dans le processus de balayage vers l'avant ou vers l'arrière.

Haut

scénarios

la structure de la table est le suivant:

CREATE TABLE t(

id int (11) NOT NULL,

c int (11) NULL DEFAULT,

d int (11) NULL DEFAULT,

Clé primaire ( id),

KEY c( c)

) MOTEUR = InnoDB;

insérer dans les valeurs de T (0,0,0), (5,5,5),

(10,10,10), (15,15,15), (20/20/20), (25,25,25);

Scène 1: index de clé primaire blocage intermittent équivalent

Session Session Session B C

commencer;

mise à jour t ensemble d = d + 1 où id = 7;

insérer dans les valeurs de T (8,8,8);

mise à jour sont bloquées ensemble d t = d + 1 où id = 10;

Où l'indice clé primaire colonne id et la ligne id = 7 n'existe pas.

Pour la séance A est:

Le principe 1, l'appareil est verrouillé la clé suivante, puisque id = 7 est dans 5 - 10, par défaut de la clé suivante gauche et à droite pour ouvrir et fermer. Par conséquent, la gamme (5,10].

L'optimisation 2, mais est équivalent, car l'ID de requête = 7, id = 10 à la fin. prochaine clé dégénérés verrouille dans un intervalle (5,10).

Pour la séance B est la suivante:

Insertion des conflits de blocage des lacunes, il échoue.

Pour Session C est la suivante:

Le principe 1, verrou de clé (5, 10].

L'optimisation 1: un index unique à la serrure, les rangées de verrouillage dégradation. Plage devient: id = verrouillage de la ligne 10

Session C et Session A (5,10) ne sont pas en conflit avec lui.

Ici, on peut voir, verrous de ligne et serrures sont tous convertis espace verrous prochaine clé après certaines conditions sont respectées et que l'appareil est verrouillé clé suivante.

Scénario 2: index non unique verrou d'équivalence

Session Session Session B C

commencer;

sélectionner à partir de id t où c = 5 verrouillage en mode de partage;

mise à jour t ensemble d = d + 1 où id = 5;

Interroge insert normale en valeurs de t (7,7,7);

Il est bloqué

Une certaine inquiétude: c index non unique, seul l'identifiant de champs de requête, verrouillage en mode action pour répondre aux conditions de la ligne, plus un verrou en lecture.

Session A:

c = 5, et la valeur équivalente de la requête. Avant d'ajouter verrou de clé, dans la gamme (0,5].

Étant donné que c est un indice commun, donc le seul accès c = 5 ce dossier ne nous arrêterons pas, continuera à traverser vers la droite, jusqu'à la fin 10. Selon le principe 2, id = 10 temps ajoutera la clé suivante (5,10].

Id = 10, mais l'optimisation 2 satisfont, un verrou dégénéré gap (5,10).

Selon le principe 2, la requête en utilisant l'indice de couverture, les valeurs id peuvent être obtenues directement, n'est pas l'index de clé primaire d'accès, n'est pas verrouillé.

Session B:

1 1 selon les principes et l'optimisation, pour ajouter l'index de clé primaire id = verrouillage de la ligne 10, pas en conflit, avec succès modifié.

Session C:

Depuis Session A a l'indice c (5,10) de la fente de verrouillage, c = 7 conflit inséré, il est bloqué.

Comme on le voit, en effet, bloqué dans l'index, et seulement ajouté à l'accès au dossier, si vous voulez éviter dans les données suivantes du mode de partage est mis à jour dans la serrure, les besoins sur le terrain à introduire pour couvrir l'indice ne peut pas contenir.

En supposant que la déclaration session A a été modifiée pour sélectionner id de t où c = 5 pour la mise à jour, pour la mise à jour de mettre à jour la transaction en cours peut représenter des données, l'indice de clé primaire pour répondre à la condition se verrouille. A cette session B, il sera bloqué.

Scénario 3: index non unique de verrouillage équivalent - Verrouillez la clé primaire

Session A Session B

commencer;

sélectionner à partir de id t où c = 5 verrouillage en mode de partage;

insérer dans les valeurs de T (9,10,7);

Il est bloqué

Et une scène 2 est très similaire au concept de ce mode de réalisation est mieux écart principalement expliqué.

Session A blocage gamme de la même, pour augmenter l'indice de C (0,5], et (5, 10) des verrous de ligne. Le besoin de savoir est clé formée d'index non uniques, comprennent id de clé primaire, utilisé pour garantir l'unicité résistance, dessiner un schéma ci-dessous.

image 20200304140317000

Vu de la figure, en raison de la présence de l'index de clé primaire non unique id, et le classement selon l'arbre B +, seule la valeur de c ne peut être modifié et inséré dans la plage de verrouillage, une plage correspondant à l'identifiant ne peut être modifié. Comment comprendre cette phrase aussi, l'exemple ne veut pas dire, l'indice de clé primaire ne sera pas verrouillé, voici comment l'id clé primaire a été verrouillé?

Tout d'abord, l'indice de clé primaire est en outre un arbre B + ne pas verrouillé, mais ici parce que C est index non unique, B formé + arbre a besoin d'être l'indice de clé primaire Id inclure, et triées par le premier champ de c, le champ id. Ainsi, lorsque le champ est ajouté à la serrure de la rangée de c, l'identifiant des verrous de ligne correspondant également ajouté.

Dans l'exemple ci-dessus, la mise à jour Session2 a réussi parce que les modifications que d beaucoup, et ne met pas à jour la valeur de l'identifiant, un tel succès. Et là, je veux insérer (id = 6, c = 10), c = 10 mais pas de verrouillage, mais id = 6 était dans la gamme de la serrure, alors voici est bloqué. De même insert (id = 100, c = 6) est bloqué.

Il est à dire, pour index non unique, compte tenu de plage de verrouillage, en tenant compte de la situation de la clé primaire Id.

Scénario 4: verrouillage de la plage d'index de clé primaire

Session Session Session B C

commencer;

sélectionner à partir de * t où id> = 10 et id <11 pour la mise à jour;

insérer dans les valeurs de T (8,8,8);

normal

insérer dans les valeurs de T (13,13,13);

Il est bloqué

mise à jour t ensemble d = d + 1 où id = 15;

Il est bloqué

Session A:

trouver d'abord les id = 10 lignes, est des requêtes équivalentes. Selon un principe, une optimisation, la gamme de ligne id = 10.

Déplacement vers l'arrière, dans le cadre d'une requête pour trouver la ligne id = 15, selon le principe de 2, la plage (10, 15]

Session B:

Insérer (8,8,8) peut, (13,13,13) à mourir.

Session C:

id = 15 également dans le cadre de la serrure, de sorte qu'il est bloqué.

Scénario 5: index non unique serrure de gamme

Session Session Session B C

commencer;

sélectionner à partir de * t où c> = 10 et c <11 pour la mise à jour;

insérer dans les valeurs de T (8,8,8);

Il est bloqué

insérer dans les valeurs de T (13,13,13);

Il est bloqué

mise à jour t ensemble d = d + 1, où c = 15;

Il est bloqué

Session A:

Etant donné que l'indice de non-unique c, c = 10 à l'indice de requête équivalente, selon un principe, la gamme de verrouillage (5, 10].

Droit traversal, les requêtes de plage, plage de verrouillage (10, 15].

Session B:

(8,8,8) et (13,13,13) ont un conflit, il est bloqué.

Session C:

c = 5 est également bloqué, bloqueront.

Scène 6: Le seul bug de verrouillage de la plage d'index

Session Session Session B C

commencer;

sélectionner à partir de * t où id> 10 et id <= 15 pour la mise à jour;

mise à jour t ensemble d = d + 1 où id = 20;

Il est bloqué

insérer dans les valeurs de T (16,16,16);

Il est bloqué

Session A:

Le processus a commencé à chercher plus de 10 est la première fois que la portée de l'enquête, il n'y a aucun principe d'optimisation. Plus (10, 15].

Il y a une place particulière, en théorie, parce que l'id est une clé primaire unique, trouver id = 15 doit être arrêté, mais en réalité n'a pas. Selon le principe de bogue, continuera à scanner jusqu'à ce que la première valeur est pas satisfaite, alors trouver id = 20, plage à trouver car il est, en principe, pas optimisé, continuer à verrouillage (15, 20].

Ce bug a été corrigé dans le 8.0.18

Session B et C session pour les verrouillage et la portée du conflit.

Scène 7: index non unique supprimer

Session Session Session B C

commencer;

Supprimer t où c = 10;

insérer dans les valeurs de T (12,12,12)

Il est bloqué

mise à jour t ensemble d = d + 1, où c = 15;

succès

Plus où les états et la logique verrouillée select * pour la déclaration de mise à jour similaire à la suppression.

Session A:

Selon le principe d'un plus (5, 10] de la prochaine clé.

Droit traversal, 2, plus (10, 15) de la serrure selon l'optimisation intermittente.

Scène 8: index non unique limite

Session A Session B

commencer;

Supprimer t où c = 10 1 limite;

insérer dans les valeurs de T (12,12,12)

normal

C = 10, bien que seule une fiche, la gamme de verrouillage de la scène et 7 différent.

Session A:

Selon le principe d'un plus (5, 10] de la prochaine clé.

En raison de la limite d'augmentation de 1, afin de trouver une boîte, et vous n'avez pas besoin de continuer à traverser, qui est non verrouillé.

Donc, pour la session B, il est dans l'obstruction.

Scène 9: avance la prochaine clé de blocage

Session A Session B

commencer;

sélectionner à partir de id t où c = 10 verrouillage en mode de partage;

mise à jour t ensemble d = d + 1, où c = 10;

Il est bloqué

insérer dans les valeurs de T (8,8,8)

ERREUR 1213 (40001): Deadlock trouvé en essayant d'obtenir serrure; essayez de redémarrer transaction

Session A de A et (10, 15) de la fente de verrouillage plus (5,10]-clé suivante..

Session B et Session A souhaitées gamme de la même serrure, avant d'ajouter (5,10] prochaine-clé trouvé à bloquer, à l'arrière (10, 15) ne sont pas couplés, l'attente temporaire.

La session A, on a ajouté plage de verrouillage (8,8,8) et B de la session (5,10] conflits bloqués formant A, B respectivement à attendre. Initiator détection de blocage, relâcher session B.

Si l'insert en valeurs t (8,8,8) dans l'insert en valeurs t (11,11,11) est possible, en raison de la fermeture intermittente session B (10, 15) ne sont pas couplés.

Analyse de l'impasse:

mysql> Afficher l'état du moteur InnoDB \ G;


DERNIER DETECTE IMPASSE


08/03/2020 17:04:10 0x7f9be0057700

*** (1) TRANSACTION:

TRANSACTION 836108, ACTIVE lecture de l'index de départ de 16 sec

tables MySQL en cours d'utilisation 1, 1 verrouillés

Attente de verrouillage 2 struct de serrure (s), la taille tas 1136, une serrure de rangée (s)

fil MySQL id 1653, OS fil poignée 140307320846080, id requête 1564409 localhost mise à jour de cisco

mise à jour t ensemble d = d + 1, où c = 10

*** (1) POUR CE CADENAS WAITING A ACCORDER:

RECORD SERRURES espace id n ° 4 251 Page n bits 80 indice c de la table my_test. tTRX id 836108 Lock_Mode attente X

serrure enregistrement, tas n ° 4 ENREGISTREMENT PHYSIQUE n_fields 2; Format compact; information bits 0

0: len 4; 8000000a hexagonal; asc ;;

1: len 4; 8000000a hexagonal; asc ;;

*** (2) TRANSACTION:

TRANSACTION 836109, ACTIVE insertion 22 sec

tables MySQL en cours d'utilisation 1, 1 verrouillés

5 struct de serrure (s), la taille tas 1136, 3 verrou de ligne (s), les entrées du journal annuler 1

id fil MySQL 1655, OS fil poignée 140307455112960, id requête 1564410 localhost mise à jour cisco

insérer dans les valeurs de T (8,8,8)

*** (2) a le verrou (S):

RECORD SERRURES espace id n ° 4 251 Page n bits 80 indice c de la table my_test. ttrx id 836109 mode de verrouillage S

serrure enregistrement, tas n ° 4 ENREGISTREMENT PHYSIQUE n_fields 2; Format compact; information bits 0

0: len 4; 8000000a hexagonal; asc ;;

1: len 4; 8000000a hexagonal; asc ;;

*** (2) POUR CE CADENAS WAITING A ACCORDER:

RECORD SERRURES espace id n ° 4 251 Page n bits 80 indice c de la table my_test. ttrx id 836109 Lock_Mode écart de verrous de X avant insert rec attente intention

serrure enregistrement, tas n ° 4 ENREGISTREMENT PHYSIQUE n_fields 2; Format compact; information bits 0

0: len 4; 8000000a hexagonal; asc ;;

1: len 4; 8000000a hexagonal; asc ;;

*** WE ROLL TRANSACTION DE RETOUR (1)

(1) des informations de transaction indique que le premier blocage de la transaction.

(2) des informations de transaction indique que le second blocage de la transaction.

NOUS TRANSACTION RETOUR ROULEAU (1) indique que l'impasse du système de traitement.

Pour (1) TRANSACTION:

(1) D'ATTENTE POUR CE SERRURE A ACCORDER montre un cas où la mise à jour de la série t d = d + 1, où c = 10 pour demander un verrou d'écriture, et le verrou est en attente.

L'application est soumis n_fields 2, 8000000a hexagonale, et 8000000a hexagonal;, à savoir l'enregistrement ID = 10 et c = 10.

Pour (1) TRANSACTION:

Maintient le verrou (S): 2 indique que la transaction en cours tient serrures: 8000000a hexagonale, et 8000000a hexagonal;.

ATTENDANT CE CADENAS A ACCORDER: attend la représentation pour l'insertion en valeurs t (8,8,8).

Lock_Mode X serrures brèche devant attente intention d'insertion rec: montrer l'intention lors de l'insertion, dans l'attente d'un espace de verrouillage (écart avant rec).

Donc, le choix final, rouler la transaction (1).

Scène 10: index non unique par ordre

Session A Session B

commencer;

sélectionner à partir de * t où c> = 15 et c <= 20 par ordre décroissant c verrouillage en mode de partage;

insérer dans les valeurs de T (6,6,6);

Il est bloqué

En analysant la procédure de verrouillage spécifique, une première analyse de l'ordre de mise en œuvre des déclarations. Une session est utilisée comme orderY par c desc ordre décroissant selon l'instruction, et que des moyens sur l'arbre d'index C, trouver la valeur de la première 20, puis traverse gauche. Étant donné que la valeur de C et 20 valeur d'index non unique devrait être le dossier le plus à droite.

Session A de la procédure de verrouillage:

Après avoir trouvé la première valeur de c = 20, plus la clé suivante (15,20].

Mais pas arrêter, parce qu'ils ne peuvent pas déterminer le courant c = 20 est la bonne valeur de continuer à traverser c = 25, a été trouvé pas satisfait, 2, plus (20, 25) de la serrure selon l'optimisation des lacunes.

Puis traversée de la gauche c = 20 à gauche, pour trouver le c = 15, le verrou de clé (10,15].

Et est la même que précédemment, c = 15 est incapable de déterminer la valeur la plus à gauche pour continuer à traverse c = 10, 2, plus (5,10) selon l'une serrure à optimiser la clairance.

Enfin, la sélection * correspondant est l'index de clé primaire id = 10,15,20 ainsi que le verrouillage de ligne.

Scène 11: INSERT INTO .... SELECT ...

Session A Session B

en commençant; en commençant;

insérer dans les valeurs de T (1,1,1);

insérer dans t (id, c, d) sélectionner à partir de 1,1,1 t où id = 1;

Il est bloqué

Afin d'assurer la cohérence des données, pour INSERT INTO .... SELECT ... dans la section de sélection sera ajouté verrou de lecture de la clé suivante.

Pour Session A, après l'insertion des données, les verrous de ligne avec id = 1. Session B sélectionner et la lecture même si la cohérence, mais ajouter un identifiant de verrouillage de lecture = 1. Session A et le conflit, il a été bloqué.

Scène 12: inégalité des conditions de requête équivalente

commencer;

sélectionner à partir de * t où id> 9 et id <12 commande par id desc de mise à jour;

Car ici est l'ordre par la déclaration, l'optimiseur d'abord trouver la première valeur inférieure à 12. Une fois le processus de recherche d'arbre d'index, en fait, pour trouver l'id = valeur 12, mais n'a pas trouvé, pour trouver l'identifiant de traverse droite = 15, de sorte que le verrou (10, 15].

Cependant, en raison de la première recherche est équivalent à trouver (dans l'arbre de recherche d'index), selon optimiser 2, dans une serrure de fente (10, 15).

Puis traversée vers la gauche, dans une série de requêtes pour trouver id = 5 ligne, plus (0,5] de clé suivante.

Scène 13: la requête équivalente

commencer;

sélectionner à partir de id t où c dans (5,20,10) de verrouillage en mode de partage;

mysql> select id expliquer de t où c dans (5,20,10) de verrouillage en mode de partage \ G;

1. rangée

      id: 1

select_type: SIMPLE

    table: t

partitions: NULL

    type: range

possible_keys: c

      key: c

  key_len: 5

      ref: NULL

    rows: 3

filtered: 100.00

    Extra: Using where; Using index

Une rangée dans la série, une mise en garde (0.00 sec)

ERREUR:

Aucune requête spécifiée

rangs = 3 et en utilisant le c d'index, trois valeurs sont décrites par un B + cible de recherche d'arbre.

Trouvez d'abord c = 5, verrouillage (0,5]. Etant donné que c est pas le seul indice pour traverser le droit à c = 10, commence à trouver l'équivalent, plus (5,10).

Trouver c = 15, les verrous (10, 15], plus (15, 20).

Enfin, recherchez c = 20, verrouillage (15,20]. Plus (20, 25).

Visible, MySQL, le verrou est l'une augmentation progressive.

Si l'on suppose qu'il ya une telle déclaration:

sélectionner à partir de id t où c dans (5,20,10) par ordre décroissant c pour la mise à jour;

Parce qu'il est l'ordre par desc, bien que, lorsque la plage de verrouillage ne change pas, l'ordre du verrou changé, va suivre c = 20, c = 10, c = 5 dans cet ordre. Le verrou. Bien que le blocage de l'écart lui-même est pas un conflit, mais il enregistrera les verrous. Si tel est le cas de deux déclaration simultanée, impasse peut se produire, la première instruction a c5, verrous de ligne, les demandes de verrouillage c = 10 lignes. Lorsque le deuxième énoncé, avec un c = verrou ligne 10, les lignes de demande de verrouillage c = 5.

Scène 14: GAP verrouillage dynamique

Session A Session B

commencer;

sélectionner à partir de * t où id> 10 et id <= 15 pour la mise à jour;

Supprimer t où id = 10;

succès

insérer dans les valeurs de T (10,10,10);

Il est bloqué.

Ici insert est bloqué, le blocage parce que l'écart est un concept dynamique, Session B après la suppression de l'enregistrement id = 10, la fente de maintien de session A augmente.

Pour la tenue d'origine Session A, (10, 15] et (15, 20] des verrous sur la prochaine clé. Session B Supprimer l'enregistrement id = 10, (10, 15] dans un (5,15] jeu. donc, après l'insertion ne sera pas revenir en arrière.

Scène 15: mise à jour dynamique de verrouillage Gap

Session A Session B

commencer;

select * from t où id> 5 verrouillage en mode action;

mise à jour t ensemble c = 1 où c = 5;

succès

mise à t = 5 ensemble c où c = 1;

Il est bloqué.

Session Un verrou: (5,10], (10,15], (15,20], (20,25], (25, super-maman].

c> se trouve dans un cinquième c = 10, et la gamme de recherche, le principe d'aucune optimisation.

mise à jour Session B peut être divisée en deux étapes:

Insert (c = 1, id = 5).

Supprimer (c = 5, id = 5).

En variante comprendre, plus (0,5] prochaine clé, et (5, 10) de la fente de verrouillage, mais les verrous d'espacement ne sont pas en conflit.

Session Un verrou modifié devient;

(C = 1, 10], (10,15], (15,20], (20,25], (25, super-maman].

Suivant: mise à jour t set c = 1 où c = 1

Insert (c = 5, id = 5).

Supprimer (c = 1, id = 5).

La première étape est inséré dans les conflits de verrouillage de la serrure gap et de l'intention.

Je suppose que tu aimes

Origine blog.51cto.com/14735798/2476427
conseillé
Classement