Maison base de données tutoriel mysql Principe de contrôle de concurrence Mysql

Principe de contrôle de concurrence Mysql

Aug 19, 2019 am 11:41 AM
并发控制

Mysql est une base de données relationnelle open source grand public qui fournit des services de stockage de données hautes performances. Lors du développement back-end,

vous rencontrerez parfois des goulots d'étranglement en termes de performances. Parfois, ces goulots d'étranglement ne proviennent pas de l'application elle-même, mais du niveau de la base de données.

Ainsi, maîtriser certains des principes sous-jacents de Mysql nous aidera à mieux comprendre Mysql, à effectuer des réglages de performances sur Mysql et à

développer des services back-end hautes performances.

1. Le cadre logique de mysql

Le schéma du cadre logique de mysql est le suivant :

Principe de contrôle de concurrence Mysql

La couche supérieure est de gérer le client Connecté .

Effectue principalement le traitement des connexions, l'authentification des autorisations, la sécurité, etc. Mysql maintient un pool de threads au niveau de cette couche pour gérer les connexions des clients. Mysql peut utiliser l'authentification par nom d'utilisateur et mot de passe,

peut également utiliser l'authentification par certificat X.509 basée sur SSL.

La deuxième couche se compose de trois parties  : le cache de requêtes, l'analyseur et l'optimiseur. L'analyseur est utilisé pour analyser les instructions SQL et l'optimiseur optimisera les instructions analysées.

Avant d'analyser la requête, le serveur vérifiera d'abord le cache de requête. Si le résultat de la requête correspondant peut y être trouvé, il n'est pas nécessaire d'effectuer une analyse, une optimisation, etc. retourné directement. Les procédures stockées, les déclencheurs, les vues, etc. sont tous implémentés dans cette couche.

La troisième couche est le moteur de stockage Le moteur de stockage est responsable du stockage des données dans MySQL, de l'extraction des données, du démarrage d'une transaction, etc. Le moteur de stockage communique avec la couche supérieure via des API. Ces API masquent les différences entre les différents moteurs de stockage, rendant ces différences transparentes pour le processus de requête de la couche supérieure. Le moteur de stockage n'analysera pas SQL. Le moteur de stockage le plus couramment utilisé pour MySQL est InnoDB.

2. Contrôle de concurrence de MySQL

Si plusieurs threads exploitent des données en même temps, cela peut entraîner des problèmes de contrôle de concurrence.

2-1. Verrouillage en lecture-écriture

Si plusieurs threads ne lisent que des données, ils peuvent réellement les lire ensemble sans s'affecter les uns les autres. utilisez "read Lock", également connu sous le nom de verrou partagé.

Les threads qui acquièrent des verrous en lecture ne se bloqueront pas et pourront lire une ressource en même temps.

Si un thread a besoin d'écrire des données, il doit utiliser un "verrou en écriture", également appelé verrou exclusif.

Les verrous en écriture bloqueront les autres verrous en écriture et en lecture jusqu'à ce que l'opération d'écriture soit terminée.

2-2. Granularité du verrouillage

Tout d'abord, clarifiez un concept : sur une ressource donnée, moins il y a de données à verrouiller, plus il y a de concurrence. le système peut gérer. Plus il est élevé.

Mais le verrouillage consomme également des ressources. Si le système passe beaucoup de temps à gérer les verrous au lieu d'accéder aux données,

alors les performances du système peuvent être affectées.

Une bonne "stratégie de verrouillage" consiste donc à trouver un équilibre entre la surcharge de verrouillage et la sécurité des données. Mysql prend en charge plusieurs architectures de moteur de stockage,

Chaque moteur de stockage a Vous pouvez implémenter votre propre stratégie de verrouillage et. verrouiller la granularité.

2-3. Les verrous de table et les verrous de rangées

Les verrous de table, comme leur nom l'indique, verrouillent la table entière. Les frais généraux de verrouillage de table sont relativement faibles. Après avoir ajouté un verrou en écriture à la table, toutes les opérations de lecture et d'écriture sur la table par d'autres utilisateurs seront bloquées.

Dans Mysql, bien que le moteur de stockage puisse fournir ses propres verrous, Mysql utilise parfois des verrous de table, tels que des instructions telles que ALTER TABLE.

Les verrous en écriture ont une priorité plus élevée que les verrous en lecture, donc une demande de verrouillage en écriture peut être insérée au début de la file d'attente des verrous en lecture.

Le verrouillage au niveau de la ligne verrouille la ligne entière, ce qui peut prendre en charge le traitement simultané dans la plus grande mesure, mais la surcharge de déverrouillage sera également relativement élevée. Les verrous au niveau des lignes ne sont implémentés qu'au niveau de la couche du moteur de stockage

Tous les moteurs de stockage implémentent les verrous au niveau des lignes à leur manière.

3. MVCC

MVCC est un "contrôle de concurrence multi-versions". On peut considérer que MVCC est une variante du verrouillage au niveau des lignes, mais cela évite d'en ajouter. des serrures supplémentaires dans de nombreux cas, les opérations de serrure,

sont donc moins coûteuses.

Les bases de données relationnelles grand public implémentent toutes MVCC, mais les mécanismes d'implémentation sont différents. En fait, MVCC n'a pas de norme unifiée.

Mais la plupart d'entre eux implémentent des opérations de lecture non bloquantes et les opérations d'écriture ne verrouillent que les lignes nécessaires.

MVCC garantit que les données vues dans chaque transaction lors de l'exécution sont cohérentes.

Cependant, comme différentes transactions démarrent à des moments différents, les données vues en même temps peuvent être différentes pour la même table.

Le moteur InnoDB de Mysql est implémenté en enregistrant deux colonnes cachées derrière chaque ligne d'enregistrements.

L'un enregistre l'heure de création de la ligne, et l'autre enregistre l'heure d'expiration (ou heure de suppression) de la ligne.

En fait, ce qui est stocké n'est pas un horodatage réel, mais le « numéro de version du système ».

Chaque fois qu'une transaction est démarrée, le numéro de version du système sera incrémenté. Lorsqu'une transaction démarre, le numéro de version du système sera utilisé comme numéro de version de la transaction, qui est utilisé pour comparer avec le numéro de version de la ligne interrogée.

Ce qui suit présente le fonctionnement des numéros de version dans les opérations CRUD courantes :

INSERT

Enregistrez la version actuelle du système en tant que numéro de version de la ligne

DELETE

Enregistrez le numéro de version actuel du système dans la « version supprimée » de cette ligne de données.

MISE À JOUR

Insérez une nouvelle ligne d'enregistrements, enregistrez le numéro de version actuel du système comme numéro de version de navigation et enregistrez le numéro de version actuel du système dans la « version supprimée » de la ligne d'origine.

SELECT

Trouver uniquement les lignes dont la version est antérieure à la version actuelle de la transaction. Cela garantit que les lignes lues par la transaction existent avant,

ou ont été insérées ou modifiées par la transaction elle-même. La "version de suppression" de la ligne

est soit indéfinie, soit supérieure au numéro de version actuel de la transaction. Cela garantit que les lignes lues par la transaction,

, n'ont pas été supprimées avant la transaction.

MVCC ne fonctionne que sous les deux niveaux d'isolement REPEATABLE READ et READ COMMITTED, et les deux autres niveaux d'isolement ne peuvent pas fonctionner.

Parce que READ UNCOMMITTED lit toujours les dernières données, plutôt que les lignes de données qui correspondent à la version actuelle de la transaction. Et SERIALIZABLE verrouillera toutes les lignes lues.

Ci-dessus sont quelques questions sur le contrôle de concurrence compilées pour vous. Pour plus de questions connexes, veuillez visiter les didacticiels pertinents sur le site Web PHP chinois.

Tutoriel vidéo recommandé : https://www.php.cn/course/list/51/type/2.html

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Contrôle de concurrence et sécurité des threads dans le framework de collection Java Contrôle de concurrence et sécurité des threads dans le framework de collection Java Apr 12, 2024 pm 06:21 PM

Le framework de collection Java gère la concurrence via des collections thread-safe et des mécanismes de contrôle de concurrence. Les collections thread-safe (telles que CopyOnWriteArrayList) garantissent la cohérence des données, tandis que les collections non thread-safe (telles que ArrayList) nécessitent une synchronisation externe. Java fournit des mécanismes tels que des verrous, des opérations atomiques, ConcurrentHashMap et CopyOnWriteArrayList pour contrôler la concurrence, garantissant ainsi l'intégrité et la cohérence des données dans un environnement multithread.

Considérations sur le développement C# : programmation multithread et contrôle de la concurrence Considérations sur le développement C# : programmation multithread et contrôle de la concurrence Nov 22, 2023 pm 01:26 PM

Dans le développement C#, la programmation multithread et le contrôle de la concurrence sont particulièrement importants face à la croissance des données et des tâches. Cet article présentera certains points auxquels il faut prêter attention dans le développement C# sous deux aspects : la programmation multithread et le contrôle de concurrence. 1. Programmation multithread La programmation multithread est une technologie qui utilise les ressources multicœurs du processeur pour améliorer l'efficacité du programme. Dans les programmes C#, la programmation multithread peut être implémentée à l'aide de la classe Thread, de la classe ThreadPool, de la classe Task et d'Async/Await. Mais quand on fait de la programmation multithread

Intégration et extension du contrôle de concurrence des fonctions Golang et des bibliothèques tierces Intégration et extension du contrôle de concurrence des fonctions Golang et des bibliothèques tierces Apr 25, 2024 am 09:27 AM

La programmation simultanée est implémentée dans Go via Goroutine et des outils de contrôle de concurrence (tels que WaitGroup, Mutex), et des bibliothèques tierces (telles que sync.Pool, sync.semaphore, queue) peuvent être utilisées pour étendre ses fonctions. Ces bibliothèques optimisent les opérations simultanées telles que la gestion des tâches, les restrictions d'accès aux ressources et l'amélioration de l'efficacité du code. Un exemple d'utilisation de la bibliothèque de files d'attente pour traiter des tâches montre l'application de bibliothèques tierces dans des scénarios de concurrence réels.

Stratégie de contrôle de concurrence et techniques d'optimisation des performances du langage http.Transport in Go Stratégie de contrôle de concurrence et techniques d'optimisation des performances du langage http.Transport in Go Jul 22, 2023 am 09:25 AM

Stratégies de contrôle de concurrence et techniques d'optimisation des performances de http.Transport en langage Go En langage Go, http.Transport peut être utilisé pour créer et gérer des clients de requête HTTP. http.Transport est largement utilisé dans la bibliothèque standard de Go et fournit de nombreux paramètres configurables, ainsi que des fonctions de contrôle de concurrence. Dans cet article, nous verrons comment utiliser la stratégie de contrôle de concurrence de http.Transport pour optimiser les performances et montrerons des exemples de code fonctionnels. un,

L'impact du contrôle de concurrence des fonctions Golang sur les stratégies de performances et d'optimisation L'impact du contrôle de concurrence des fonctions Golang sur les stratégies de performances et d'optimisation Apr 24, 2024 pm 01:18 PM

L'impact du contrôle de concurrence sur les performances de GoLang : Consommation de mémoire : les goroutines consomment de la mémoire supplémentaire et un grand nombre de goroutines peuvent entraîner un épuisement de la mémoire. Surcharge de planification : la création de goroutines générera une surcharge de planification, et la création et la destruction fréquentes de goroutines affecteront les performances. Concurrence de verrouillage : la synchronisation des verrouillages est requise lorsque plusieurs goroutines accèdent à des ressources partagées. Cela entraînera une dégradation des performances et une latence prolongée. Stratégie d'optimisation : utilisez correctement les goroutines : créez des goroutines uniquement lorsque cela est nécessaire. Limitez le nombre de goroutines : utilisez Channel ou sync.WaitGroup pour gérer la concurrence. Évitez les conflits de verrouillage : utilisez des structures de données sans verrouillage ou minimisez les temps de maintien des verrous

Comment utiliser les verrous distribués pour contrôler les accès simultanés dans MySQL ? Comment utiliser les verrous distribués pour contrôler les accès simultanés dans MySQL ? Jul 30, 2023 pm 10:04 PM

Comment utiliser les verrous distribués pour contrôler les accès simultanés dans MySQL ? Dans les systèmes de bases de données, un accès simultané élevé est un problème courant et les verrous distribués sont l'une des solutions courantes. Cet article explique comment utiliser les verrous distribués dans MySQL pour contrôler les accès simultanés et fournit des exemples de code correspondants. 1. Principe Les verrous distribués peuvent être utilisés pour protéger les ressources partagées afin de garantir qu'un seul thread puisse accéder à la ressource en même temps. Dans MySQL, les verrous distribués peuvent être implémentés de la manière suivante : Créez un fichier nommé lock_tabl

MySQL et Oracle : comparaison de la prise en charge du contrôle de concurrence multiversion et de la cohérence des données MySQL et Oracle : comparaison de la prise en charge du contrôle de concurrence multiversion et de la cohérence des données Jul 12, 2023 pm 01:10 PM

MySQL et Oracle : comparaison de la prise en charge du contrôle de concurrence multiversion et de la cohérence des données Introduction : Dans les applications actuelles à forte intensité de données, les systèmes de bases de données jouent un rôle essentiel dans la réalisation du stockage et de la gestion des données. MySQL et Oracle sont deux systèmes de gestion de bases de données relationnelles (SGBDR) bien connus et largement utilisés dans les applications d'entreprise. Dans un environnement multi-utilisateurs, assurer la cohérence des données et le contrôle de la concurrence sont des fonctions importantes du système de base de données. Cet article partagera le contrôle de concurrence multiversion et les données entre MySQL et Oracle.

Analyse de l'expérience du projet de traitement des transactions distribuées MySQL et de contrôle de la concurrence Analyse de l'expérience du projet de traitement des transactions distribuées MySQL et de contrôle de la concurrence Nov 02, 2023 am 09:01 AM

Analyse de l'expérience du projet de traitement des transactions distribuées MySQL et de contrôle de la concurrence Au cours des dernières années, avec le développement rapide d'Internet et le nombre croissant d'utilisateurs, les exigences en matière de bases de données ont également augmenté. Dans les systèmes distribués à grande échelle, MySQL, en tant que l'un des systèmes de gestion de bases de données relationnelles les plus couramment utilisés, a toujours joué un rôle important. Cependant, à mesure que la taille des données augmente et que l'accès simultané augmente, les performances et l'évolutivité de MySQL sont confrontées à de sérieux défis. Surtout dans un environnement distribué, la manière de gérer les transactions et de contrôler la simultanéité est devenue un besoin urgent à résoudre.

See all articles