Table des matières
Verrouillage
Classification des verrous
Verrous au niveau des lignes
Le verrouillage au niveau de la table
Verrouillage au niveau de la page
Le mécanisme de verrouillage du moteur de stockage commun de MySQL
Les verrous de ligne et les verrous de table InnoDB
Verrous et blocages au niveau des lignes
Évitez les blocages
Les verrous partagés et les verrous exclusifs
1. Les verrous partagés
Verrou exclusif
3. Verrouillage d'intention
Résumé
Maison base de données tutoriel mysql Introduction au mécanisme de verrouillage de la base de données MySQL

Introduction au mécanisme de verrouillage de la base de données MySQL

Feb 01, 2019 am 10:20 AM
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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment ouvrir phpmyadmin Comment ouvrir phpmyadmin Apr 10, 2025 pm 10:51 PM

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: une introduction à la base de données la plus populaire au monde MySQL: une introduction à la base de données la plus populaire au monde Apr 12, 2025 am 12:18 AM

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.

Comment utiliser un seul fileté redis Comment utiliser un seul fileté redis Apr 10, 2025 pm 07:12 PM

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.

Place de MySQL: bases de données et programmation Place de MySQL: bases de données et programmation Apr 13, 2025 am 12:18 AM

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

Pourquoi utiliser MySQL? Avantages et avantages Pourquoi utiliser MySQL? Avantages et avantages Apr 12, 2025 am 12:17 AM

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.

Comment se connecter à la base de données d'Apache Comment se connecter à la base de données d'Apache Apr 13, 2025 pm 01:03 PM

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.

Moniteur Disd Droplet avec service d'exportateur Redis Moniteur Disd Droplet avec service d'exportateur Redis Apr 10, 2025 pm 01:36 PM

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

Comment démarrer MySQL par Docker Comment démarrer MySQL par Docker Apr 15, 2025 pm 12:09 PM

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

See all articles