


Introduction au mécanisme de verrouillage de la base de données MySQL
Cet article vous présente le mécanisme de verrouillage de la base de données MySQL. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Contrôle de concurrence
La tâche du contrôle de concurrence dans le système de gestion de base de données est de garantir que lorsque plusieurs transactions accèdent aux mêmes données dans la base de données en même temps, non Détruire l'isolement et l'unité des transactions et l'unité de la base de données.
Le blocage, l'horodatage, le contrôle de concurrence optimiste et le contrôle de concurrence pessimiste sont les principaux moyens techniques utilisés pour le contrôle de concurrence
Verrouillage
Lorsque des transactions simultanées accèdent à une ressource en même temps, cela peut entraîner une incohérence des données. Un mécanisme est donc nécessaire pour séquencer l'accès aux données afin de garantir la cohérence des données de la base de données. Les verrous sont l'un des mécanismes (Tutoriel recommandé : Tutoriel MySQL)
Classification des verrous
Divisé selon les opérations, il peut être divisé en Verrouillage DML, verrouillage DDL
Divisé selon la granularité du verrouillage, il peut être divisé en verrouillage au niveau de la table, verrouillage au niveau de la ligne, niveau de la page lock (mysql)
Selon le niveau de verrouillage, il peut être divisé en verrouillage partagé et verrouillage exclusif
-
Selon la méthode de verrouillage, il peut être divisé en verrouillage automatique et verrouillage de l'affichage
Selon la méthode d'utilisation, il peut être divisé. en verrouillage optimiste et verrouillage pessimiste
Les verrous DML sont utilisés pour protéger l'intégrité des données, y compris les verrous au niveau de la ligne (verrous TX) et les verrous au niveau de la table ( serrures TM). Les verrous DDL sont utilisés pour protéger la structure des objets de base de données, tels que les définitions structurelles de tables, d'index, etc., y compris les verrous DDL exclusifs, les verrous DDL partagés et les verrous d'analyse disruptifs
Verrous au niveau des lignes
Le verrouillage au niveau de la ligne est le verrouillage le plus détaillé de Mysql, ce qui signifie que seule la ligne actuellement utilisée est verrouillée. Les verrous au niveau des lignes peuvent réduire considérablement les conflits dans les opérations de base de données. Sa granularité de verrouillage est la plus petite, mais la surcharge de verrouillage est également la plus importante. Les verrous au niveau des lignes sont divisés en verrous partagés et verrous exclusifs
Caractéristiques : une surcharge élevée et des blocages lents peuvent survenir ; Le plus petit, la plus faible probabilité de conflit de verrouillage et le degré de concurrence le plus élevé
Le verrouillage au niveau de la table
Le verrouillage au niveau de la table est le plus grande granularité de verrouillage dans Mysql Une sorte de verrou signifie verrouiller la table entière de l'opération en cours. Il est simple à mettre en œuvre, consomme moins de ressources et est pris en charge par la plupart des moteurs Mysql. Les MYISAM et INNODB les plus couramment utilisés prennent en charge le verrouillage au niveau de la table. Le verrouillage au niveau de la table est divisé en verrouillage en lecture partagé de table (verrouillage partagé) et verrouillage en écriture exclusif de table (verrouillage exclusif)
Caractéristiques : faible surcharge, le verrouillage est rapide ; aucun blocage ne se produira ; la granularité du verrouillage est grande, la probabilité d'émettre des conflits de verrouillage est la plus élevée et la concurrence est la plus faible
Verrouillage au niveau de la page
Le verrouillage au niveau de la page est un verrou dans Mysql dont la granularité de verrouillage se situe entre le verrouillage au niveau de la ligne et le verrouillage au niveau de la table. Les verrous au niveau des tables sont rapides mais comportent de nombreux conflits. Les verrous au niveau des lignes présentent peu de conflits mais sont lents. Le verrouillage au niveau de la page est utilisé pour verrouiller un groupe d'enregistrements adjacent. BDB prend en charge les verrous au niveau de la page
Le mécanisme de verrouillage du moteur de stockage commun de MySQL
MyISAM et MEMORY utilisent des verrous au niveau de la table
BDB utilise des verrous au niveau de la page ou des verrous au niveau de la table.
-
InnoDB prend en charge les verrous au niveau de la ligne et les verrous au niveau de la table. La valeur par défaut est les verrous au niveau de la ligne
Les verrous de ligne et les verrous de table InnoDB
Le moteur InnoDB prend en charge à la fois les verrous de ligne et les verrous de table. Alors, quand la table entière sera-t-elle verrouillée, et quand une ligne sera-t-elle verrouillée ? ?
Le verrouillage des lignes InnoDB est obtenu en verrouillant les éléments d'index sur l'index. Ceci est différent de Mysql et Oracle, qui verrouillent les lignes de données correspondantes dans le bloc de données réalisé. Cette fonctionnalité d'implémentation du verrouillage de ligne d'InnoDB signifie : InnoDB utilise des verrous au niveau de la ligne uniquement lorsque les données sont récupérées via des conditions d'index, sinon InnoDb utilisera des verrous de table
Application pratique , vous devez faire attention à cette fonctionnalité du verrouillage de ligne InnoDB, sinon cela entraînera facilement un grand nombre de conflits de verrouillage, affectant ainsi les performances de concurrence
Lors d'une requête sans conditions d'indexation , InnoDB utilise C'est un verrou de table, pas un verrou de ligne
Puisque le verrou de ligne de MySQL est un verrou pour l'index, pas un verrou pour l'enregistrement, bien que les enregistrements de différentes lignes soient accessibles, if L'utilisation de clés du même index provoquera des conflits de verrouillage.
Lorsqu'une table a plusieurs index, différentes transactions peuvent utiliser différents index pour verrouiller différentes lignes. De plus, que ce soit en utilisant un index de clé primaire, un index unique ou un index ordinaire, InnoDB utilisera des verrous de ligne. sont utilisés pour verrouiller les données
Même si le champ d'index est utilisé dans la condition, l'utilisation ou non de l'index pour récupérer les données est déterminée par Mysql en jugeant le coût des différents plans de lignes. Si MySQL pense qu'une analyse complète des tables est plus efficace, comme pour certaines très petites tables, il n'utilisera pas d'index. Dans ce cas, InnoDB utilisera des verrous de table au lieu de verrous de lignes. Par conséquent, lors de l'analyse des conflits de verrouillage, n'oubliez pas de vérifier le plan d'exécution SQL
Verrous et blocages au niveau des lignes
MyISAM ne produira pas d'interblocages car MyISAM obtient toujours tout ce dont il a besoin en même temps. Verrouiller, soit tous satisfaits, soit tout le monde attend. Dans InnoDB, les verrous sont acquis progressivement, ce qui entraîne la possibilité d'un blocage
Dans MySQL, les verrous au niveau des lignes ne verrouillent pas directement les enregistrements, mais verrouillent les index. Les index sont divisés en index de clé primaire et index de clé non primaire. Si une instruction SQL opère sur l'index de clé primaire, MySQL verrouillera l'index de clé primaire. Si une instruction opère sur un index de clé non primaire, MySQL verrouillera d'abord l'index de clé primaire. index de clé non primaire. Verrouillez ensuite l'index de clé primaire concerné. Lors des opérations de mise à jour et de suppression, MySQL verrouille non seulement tous les enregistrements d'index analysés par la condition Where, mais verrouille également les valeurs de clé adjacentes, ce qu'on appelle le verrouillage de la clé suivante
Deadlock : Lorsque deux transactions sont exécutées en même temps, l'une verrouille l'index de clé primaire et attend d'autres index associés. L'autre verrouille l'index de clé non primaire et attend l'index de clé primaire. Une impasse se produit.
Après un blocage, InnoDB peut généralement le détecter et faire en sorte qu'une transaction libère le verrou et annule, et qu'une autre acquière le verrou pour terminer la transaction
Évitez les blocages
Si différents programmes accèdent à plusieurs tables simultanément, essayez de convenir d'accéder aux tables dans le même ordre, ce qui peut réduire considérablement le risque de blocage
Dans la même transaction, essayez de verrouiller toutes les ressources nécessaires en même temps pour réduire la probabilité de blocage
Pour les parties métiers très sujettes aux blocages, vous pouvez essayer d'utiliser une granularité de verrouillage améliorée pour réduire les blocages grâce au verrouillage au niveau de la table
Les verrous partagés et les verrous exclusifs
Les verrous au niveau des lignes sont dans MySQL La granularité de verrouillage la plus fine, les verrous au niveau des lignes peuvent réduire considérablement les conflits dans les opérations de base de données. Les verrous au niveau des lignes sont divisés en verrous partagés et verrous exclusifs
1. Les verrous partagés
les verrous partagés sont également appelés verrous en lecture. , est le verrou créé par l'opération de lecture. D'autres utilisateurs peuvent lire les données simultanément, mais aucune transaction ne peut modifier les données tant que tous les verrous partagés n'ont pas été libérés.
Si la transaction T ajoute un verrou partagé aux données A, les autres transactions ne peuvent ajouter que des verrous partagés à A et ne peuvent pas ajouter de verrous exclusifs. Les transactions bénéficiant de verrous partagés peuvent uniquement lire les données et ne peuvent pas modifier les données
Si la transaction T ajoute un verrou partagé aux données A puis modifie les données, les autres transactions ne pourront pas obtenir le partage. De même, si plusieurs transactions acquièrent des verrous partagés sur les mêmes données, aucune transaction ne peut modifier les données
-
Utilisation : SSELECT ... VERROUILLER EN MODE PARTAGE
Ajoutez LOCK IN SHARE MODE après l'instruction de requête, Mysql ajoutera un verrou partagé à chaque ligne du résultat de la requête lorsqu'aucun autre thread ne se concentrera sur le résultat de la requête. Lorsqu'une ligne utilise un verrou exclusif, elle peut demander avec succès un verrou partagé, sinon elle sera bloquée. D'autres threads peuvent également lire des tables à l'aide de verrous partagés, et ces threads lisent la même version des données
Verrou exclusif
. Le verrouillage exclusif est également appelé verrouillage en écriture. Si la transaction T ajoute un verrou exclusif aux données A, les autres transactions ne peuvent ajouter aucun type de blocage à A. Une transaction qui acquiert un verrou exclusif peut à la fois lire et modifier les données
Utilisation : SELECT ... FOR UPDATE. Ajoutez FOR UPDATE après l'instruction de requête et MySQL ajoutera un verrou exclusif à chaque ligne du résultat de la requête. Lorsqu'aucun autre thread n'utilise un verrou exclusif sur une ligne du jeu de résultats de la requête, vous pouvez l'appliquer avec succès. pour un verrou exclusif. Sinon, il sera bloqué
3. Verrouillage d'intention
Le verrouillage d'intention est un verrou au niveau de la table, qui est conçu. pour révéler les éléments suivants dans une transaction Le type de verrou qui sera demandé pour une ligne. Deux verrous de table dans InnoDB :
Intention Shared Lock (IS) : indique que la transaction se prépare à ajouter un verrou partagé à la ligne de données, c'est-à-dire un verrou partagé est ajouté à une ligne de données Le verrou IS de la table doit être obtenu avant
Intention verrou exclusif (IX) : Indique que la transaction se prépare à ajouter un verrou exclusif à la ligne de données , indiquant que la transaction doit d'abord ajouter un verrou exclusif à une ligne de données. Le verrou IX de la table
Le verrou d'intention est automatiquement ajouté par InnoDB et ne nécessite pas d'utilisateur. intervention
Résumé
Pour l'insertion, la mise à jour, la suppression, InnoDB ajoutera automatiquement des verrous exclusifs aux données impliquées Pour les instructions Select générales, InnoDB ; n'ajoutera aucun verrou et les transactions peuvent être explicitement ajoutées via les instructions suivantes Verrouillage partagé ou verrouillage exclusif
Verrouillage partagé : sélectionnez ... VERROUILLER EN MODE PARTAGE
Verrouillage exclusif : SÉLECTIONNER... POUR LA MISE À JOUR
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Vous pouvez ouvrir PHPMYADMIN via les étapes suivantes: 1. Connectez-vous au panneau de configuration du site Web; 2. Trouvez et cliquez sur l'icône PHPMYADMIN; 3. Entrez les informations d'identification MySQL; 4. Cliquez sur "Connexion".

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

Redis utilise une architecture filetée unique pour fournir des performances élevées, une simplicité et une cohérence. Il utilise le multiplexage d'E / S, les boucles d'événements, les E / S non bloquantes et la mémoire partagée pour améliorer la concurrence, mais avec des limites de limitations de concurrence, un point d'échec unique et inadapté aux charges de travail à forte intensité d'écriture.

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Apache se connecte à une base de données nécessite les étapes suivantes: Installez le pilote de base de données. Configurez le fichier web.xml pour créer un pool de connexion. Créez une source de données JDBC et spécifiez les paramètres de connexion. Utilisez l'API JDBC pour accéder à la base de données à partir du code Java, y compris l'obtention de connexions, la création d'instructions, les paramètres de liaison, l'exécution de requêtes ou de mises à jour et de traitement des résultats.

La surveillance efficace des bases de données Redis est essentielle pour maintenir des performances optimales, identifier les goulots d'étranglement potentiels et assurer la fiabilité globale du système. Le service Redis Exporter est un utilitaire puissant conçu pour surveiller les bases de données Redis à l'aide de Prometheus. Ce didacticiel vous guidera à travers la configuration et la configuration complètes du service Redis Exportateur, en vous garantissant de créer des solutions de surveillance de manière transparente. En étudiant ce tutoriel, vous réaliserez les paramètres de surveillance entièrement opérationnels

Le processus de démarrage de MySQL dans Docker se compose des étapes suivantes: Tirez l'image MySQL pour créer et démarrer le conteneur, définir le mot de passe de l'utilisateur racine et mapper la connexion de vérification du port Créez la base de données et l'utilisateur accorde toutes les autorisations sur la base de données
