当前位置:网站首页>Verrouillage [MySQL]
Verrouillage [MySQL]
2022-07-06 08:23:00 【Il y a le ciel quand on vole.】
Verrouillage
Une serrure est un mécanisme par lequel un ordinateur coordonne plusieurs processus ou Threads pour accéder simultanément à une ressource.Dans la base de données,Les données sont également une ressource partagée.Comment assurer la cohérence de l'accès simultané aux données、L'efficacité est un problème que toutes les bases de données doivent résoudre,Les conflits de serrures sont également un facteur important qui influe sur le rendement de l'accès simultané à la base de données.
- Global Lock:Verrouiller toutes les tables de la base de données.
- Serrure de table:Verrouiller la table entière à chaque opération.
- Verrouillage des rangées:Chaque opération Verrouille les données de ligne correspondantes.
Global Lock
Le verrouillage global est le verrouillage de l'Instance entière de la base de données,L'Instance entière est en lecture seule après le verrouillage,Inclusion ultérieureDMLDéclarations、DDLLes déclarations de commit transactionnel pour les déclarations seront bloquées.Son scénario d'utilisation typique est de faire une sauvegarde logique de l'ensemble de la bibliothèque,Verrouiller toutes les tables,Pour obtenir une vue cohérente,Assurer l'intégrité des données.
# Plus de verrouillage global
flush tables with read lock;
# Sauvegarde des données
# WindowsLigne de commande
mysqldump -h39.105.19.217 -uroot –p123456 dataBaseName > scriptName.sql
# Relâchez la serrure.
unlock tables;
Caractéristiques:
- Si vous sauvegardez sur la bibliothèque principale,Aucune mise à jour ne peut être effectuée pendant la sauvegarde,Les affaires se sont arrêtées.
- Si vous sauvegardez à partir de la bibliothèque,Les journaux binaires qui ne peuvent pas être synchronisés à partir de la Bibliothèque primaire pendant la sauvegarde,Cela peut entraîner un retard maître - esclave.
# InnoDBMoteur de stockage, Sauvegarde cohérente des données sans verrouillage
mysqldump --single-transaction -uroot –p123456 itcast > itcast.sql
Serrure de table
Serrure de table,Verrouiller la table entière à chaque opération.Gros grain de verrouillage,La probabilité de conflit de serrure est élevée,Faible concurrence.Appliqué àMyISAM、InnoDBAttendez dans le moteur de stockage.Pour les serrures de table,Il est principalement divisé en trois catégories::
- Serrure de table
- Verrouillage des métadonnées(meta data lock, MDL)
- Verrouillage intentionnel
Serrure de table
Lisez la serrure.(Serrure partagée)


Écris la serrure.(Verrouillage exclusif)


# Lire la serrure
lock tables tableName read;
# Écris la serrure
lock tables tableName write;
# Relâchez la serrure.
unlock tables;
Conclusions:Lire la serrure ne bloque pas la lecture des autres clients,Mais ça bloque l'écriture.Les serrures d'écriture bloquent la lecture des autres clients,Ça bloque l'écriture des autres clients.
Verrouillage des métadonnées
MySQL5.5 Importer un verrou de métadonnées , Verrouillage automatique lors de l'accès à une table . Les métadonnées peuvent être comprises simplement comme la structure d'une table , Lorsqu'un tableau se rapporte à une transaction non engagée , Vous ne pouvez pas modifier la structure de ce tableau . Le verrouillage des métadonnées est conçu pour éviter DMLAvecDDLConflit,Assurer l'exactitude de la lecture et de l'écriture.
Lorsque vous ajoutez un tableau 、Supprimer、Modifier、Pendant l'opération de recherche, Verrouillage partagé des serrures de données en dollars canadiens . Lors d'une opération de modification de la structure du tableau , Verrouillage exclusif des serrures de données en dollars canadiens .

# Voir l'état des verrous de métadonnées dans la base de données
select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema.metadata_locks;
Verrouillage intentionnel
Pour éviterDMLAu moment de l'exécution,Conflit entre la serrure de ligne ajoutée et la serrure de table,InInnoDB Verrouillage d'intention introduit dans le moteur de stockage , De sorte que le verrou de table ne vérifie pas chaque ligne
Les données sont - elles verrouillées? ,Utiliser des serrures intentionnelles pour réduire l'inspection des serrures de table.
- Intention de partager la serrure(IS):Par déclarationselect … lock in share modeAjouter. Compatible avec les serrures partagées pour les serrures de table , Exclusion mutuelle des serrures exclusives des serrures de montre .
- Verrouillage exclusif(IX):Parinsert、update、delete、select…for updateAjouter. Les serrures partagées et exclusives avec les serrures de table s'excluent mutuellement .
- Les serrures d'intention ne s'excluent pas mutuellement,Une fois la transaction engagée,Intention de partager la serrure、 Les serrures d'intention exclusive sont automatiquement libérées .


# Voir l'état de verrouillage de la serrure d'intention et de la serrure de ligne
select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;
Verrouillage des rangées
Verrouillage des rangées,Chaque opération Verrouille les données de ligne correspondantes.Petite granularité de verrouillage,Faible probabilité de conflit de serrure,Haute concurrence.Appliqué àInnoDBDans le moteur de stockage.InnoDBLes données de,Le verrouillage de ligne est réalisé en verrouillant les entrées d'index sur l'index, Au lieu d'ajouter à l'enregistrement
Verrouillage.Pour les serrures de rangée,Il est principalement divisé en trois catégories::
Verrouillage des rangées: Verrouillage d'une seule ligne d'enregistrement ,Empêcher d'autres transactions d'effectuer cette ligneupdateEtdelete.InRead Commit、Repeatable ReadPrise en charge au niveau de l'isolement.

Serrure de dégagement:Verrouiller l'écart d'enregistrement de l'index(Sans cet enregistrement),S'assurer que l'écart entre les enregistrements indexés est constant,Empêcher d'autres transactions de se produire dans cet intervalleinsert,Pour produire des lectures fantaisistes.InRepeatable ReadPrise en charge au niveau de l'isolement.

Serrure à clé temporaire:Combinaison de serrures de ligne et de serrures de dégagement,Verrouiller les données en même temps,Et verrouiller l'espace avant les données.InRepeatable ReadPrise en charge au niveau de l'isolement.

Verrouillage des rangées
InnoDB Le moteur de stockage implémente les deux types de verrouillage de ligne suivants :
- Serrure partagée(S):Autoriser une transaction à lire une ligne,Empêcher d'autres transactions d'obtenir un verrouillage exclusif pour le même ensemble de données.
- Verrouillage exclusif(X):Autoriser l'accès aux données de mise à jour des transactions pour les serrures exclusives, Empêcher d'autres transactions d'obtenir des serrures partagées et des exclusions pour le même ensemble de données
Verrouillage.

Lors de la recherche d'un index unique,Lorsqu'une correspondance équivalente est faite pour un enregistrement existant,Sera automatiquement optimisé pour les serrures de ligne.InnoDB Le verrouillage de ligne du moteur de stockage est pour le verrouillage indexé , Lorsqu'il n'est pas indexé , Tous les enregistrements du tableau seront verrouillés , Le verrouillage de la table est mis à jour .

Le client obtient idPour1 Serrure partagée pour cette ligne , Le client 2 peut obtenir idPour3 Cette rangée est fermée. , Parce que ce n'est pas la même ligne de données . Et si le client 2 veut obtenir idPour1 C'est une serrure exclusive. ,Sera bloqué, Je pensais que les serrures partagées et exclusives s'excluaient mutuellement .
Quand le client I ,Mise en œuvreupdateDéclarations,Ce sera pouridPour1 Le dossier est verrouillé. .Client 2, Si elle est également appliquée updateMise à jour des déclarationsidPour1Données,Aussi pouridPour1 Les données sont verrouillées. , Mais le client 2 sera bloqué , Parce que les serrures exclusives s'excluent mutuellement . Jusqu'à ce que le client engage une transaction , Pour libérer la serrure de cette rangée , Le client 2 débloque maintenant .
Client 1 transaction ouverte ,Et la mise en œuvreupdateDéclarations,Mise à journamePourLilyDonnées,C'est - à - direidPour19Les dossiers de . Puis mettre à jour dans le client II idPour3Les dossiers de, Mais pas directement. ,Sera bloqué,Pourquoi?? Parce qu'à ce stade, le client est basé sur name Lorsque le champ est mis à jour nameLe champ n'est pas indexé,S'il n'y a pas d'index, La serrure de ligne passe à la serrure de table ( Parce qu'un verrou de ligne est un verrou ajouté à une entrée d'index ,EtnamePas d'index).
# Voir l'état de verrouillage de la serrure d'intention et de la serrure de ligne
select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;
Serrure de dégagement et serrure à clé
Par défaut,InnoDBLe moteur de stockage estRepeatable ReadNiveau d'isolement des transactions en cours,Recherche et indexation à l'aide d'un verrou à clé temporaire,Pour éviter la fausse lecture.
Requête équivalente sur Index(Index unique),Lors du verrouillage d'un enregistrement inexistant,Optimisé pour les serrures de dégagement .

Requête équivalente sur Index(Index non unique),Lorsque la dernière valeur ne satisfait pas aux exigences de requête lors de la traversée à droite, La serrure à clé adjacente se dégrade en serrure de dégagement .
InnoDBMoteur de stockageB+Index des arbres, Les noeuds foliaires sont des listes bidirectionnelles ordonnées . Si, La valeur de la requête basée sur cet index secondaire est 18Données, Et avec une serrure partagée , On est enfermés. 18 Ça te va? ? Ce n'est pas, Parce que c'est un index non unique , Il peut y en avoir plusieurs dans cette structure 18L'existence de,Alors..., Continuez à regarder en arrière pendant que vous Verrouillez , Trouver une valeur qui ne répond pas aux critères ( Dans le cas présent, 29).Il y a un lien18Serrure à clé,Et oui.29 Verrouillage de l'espace avant .

- Requête de plage sur index(Index unique),Accède à la première valeur qui ne satisfait pas à la condition.
Les critères de requête sont: id>=19, Et ajouter une serrure partagée . À ce stade, nous pouvons utiliser les données disponibles dans la table de base de données , Diviser les données en trois parties :[19]、(19,25]、(25,+∞]. Par conséquent, le verrouillage de la base de données est ,19Avec une serrure,25 Serrure à clé (Contient25Et25 Écart précédent ), C'est l'infini
Serrure à clé( Infini positif et dégagement précédent ).
Attention!:Le verrouillage de l'écart a pour seul but d'empêcher d'autres transactions d'insérer l'écart..Les serrures de dégagement peuvent coexister,Un verrouillage d'écart appliqué par une transaction n'empêche pas une autre transaction d'appliquer un verrouillage d'écart sur le même intervalle.
RÉFÉRENCES:https://www.bilibili.com/video/BV1Kr4y1i7ru
边栏推荐
- ESP系列引脚說明圖匯總
- synchronized 解决共享带来的问题
- Introduction to number theory (greatest common divisor, prime sieve, inverse element)
- CAD ARX 获取当前的视口设置
- The Vice Minister of the Ministry of industry and information technology of "APEC industry +" of the national economic and information technology center led a team to Sichuan to investigate the operat
- Use br to back up tidb cluster data to S3 compatible storage
- 从 CSV 文件迁移数据到 TiDB
- ESP系列引脚说明图汇总
- leetcode刷题 (5.28) 哈希表
- 【云原生】手把手教你搭建ferry开源工单系统
猜你喜欢

On the day of resignation, jd.com deleted the database and ran away, and the programmer was sentenced

Sanzi chess (C language)

Personalized online cloud database hybrid optimization system | SIGMOD 2022 selected papers interpretation

让学指针变得更简单(三)

Artcube information of "designer universe": Guangzhou implements the community designer system to achieve "great improvement" of urban quality | national economic and Information Center

Online yaml to CSV tool
![[t31zl intelligent video application processor data]](/img/67/b77c1de990d9b8868f8df5e55b0227.png)
[t31zl intelligent video application processor data]

Fibonacci sequence

leetcode刷题 (5.28) 哈希表

Secure captcha (unsafe verification code) of DVWA range
随机推荐
Wireshark grabs packets to understand its word TCP segment
"Designer universe" Guangdong responds to the opinions of the national development and Reform Commission. Primary school students incarnate as small community designers | national economic and Informa
[research materials] 2022 enterprise wechat Ecosystem Research Report - Download attached
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
Zhong Xuegao, who cannot be melted, cannot escape the life cycle of online celebrity products
leetcode刷题 (5.29) 哈希表
Learn Arduino with examples
化不掉的钟薛高,逃不出网红产品的生命周期
synchronized 解决共享带来的问题
LDAP应用篇(4)Jenkins接入
根据csv文件某一列字符串中某个数字排序
C language custom type: struct
使用 TiUP 升级 TiDB
What is the use of entering the critical point? How to realize STM32 single chip microcomputer?
C language - bit segment
1202 character lookup
Huawei cloud OBS file upload and download tool class
Erc20 token agreement
Analysis of pointer and array written test questions
Restore backup data on S3 compatible storage with tidb lightning