当前位置:网站首页>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
边栏推荐
- Pyqt5 development tips - obtain Manhattan distance between coordinates
- 2022 Inner Mongolia latest water conservancy and hydropower construction safety officer simulation examination questions and answers
- Remote storage access authorization
- [MySQL] database stored procedure and storage function clearance tutorial (full version)
- CAD ARX gets the current viewport settings
- Summary of phased use of sonic one-stop open source distributed cluster cloud real machine test platform
- Secure captcha (unsafe verification code) of DVWA range
- Let the bullets fly for a while
- Grayscale upgrade tidb operator
- [research materials] 2021 live broadcast annual data report of e-commerce - Download attached
猜你喜欢
Hcip day 16
From monomer structure to microservice architecture, introduction to microservices
matplotlib. Widgets are easy to use
C语言自定义类型:结构体
[Yugong series] February 2022 U3D full stack class 011 unity section 1 mind map
【MySQL】锁
Sanzi chess (C language)
Résumé des diagrammes de description des broches de la série ESP
vulnhub hackme: 1
"Designer universe" APEC design +: the list of winners of the Paris Design Award in France was recently announced. The winners of "Changsha world center Damei mansion" were awarded by the national eco
随机推荐
Introduction to backup and recovery Cr
String to leading 0
Easy to use tcp-udp_ Debug tool download and use
matplotlib. Widgets are easy to use
LDAP应用篇(4)Jenkins接入
"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
[Yugong series] creation of 009 unity object of U3D full stack class in February 2022
[research materials] 2022 China yuancosmos white paper - Download attached
Uibehavior, a comprehensive exploration of ugui source code
VMware 虚拟化集群
synchronized 解决共享带来的问题
使用 Dumpling 备份 TiDB 集群数据到兼容 S3 的存储
CAD ARX gets the current viewport settings
CAD ARX 获取当前的视口设置
1202 character lookup
What is the use of entering the critical point? How to realize STM32 single chip microcomputer?
PLT in Matplotlib tight_ layout()
Analysis of Top1 accuracy and top5 accuracy examples
Convolution, pooling, activation function, initialization, normalization, regularization, learning rate - Summary of deep learning foundation
PHP - Common magic method (nanny level teaching)