Heim Datenbank MySQL-Tutorial Prinzip der MySQL-Parallelitätskontrolle

Prinzip der MySQL-Parallelitätskontrolle

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

MySQL ist eine gängige relationale Open-Source-Datenbank, die leistungsstarke Datenspeicherdienste bereitstellt. Bei der Back-End-Entwicklung treten

manchmal Leistungsengpässe auf. Manchmal sind diese Engpässe nicht auf die Anwendung selbst zurückzuführen, sondern auf die Datenbankebene.

Die Beherrschung einiger der zugrunde liegenden Prinzipien von MySQL wird uns also helfen, MySQL besser zu verstehen, Leistungsoptimierungen für MySQL durchzuführen und

leistungsstarke Back-End-Dienste zu entwickeln.

1. Das logische Framework von MySQL

Das logische Framework-Diagramm von MySQL ist wie folgt:

Prinzip der MySQL-Parallelitätskontrolle

Die oberste Ebene ist die Verwaltung des Clients .

Hauptsächlich Verbindungsverarbeitung, Autorisierungsauthentifizierung, Sicherheit usw. MySQL unterhält auf dieser Ebene einen Thread-Pool, um Verbindungen von Clients zu verarbeiten. MySQL kann die Authentifizierung mit Benutzername und Passwort verwenden,

kann auch die SSL-basierte X.509-Zertifikatauthentifizierung verwenden.

Die zweite Ebene besteht aus drei Teilen : Abfragecache, Parser und Optimierer. Der Parser wird zum Parsen von SQL-Anweisungen verwendet, und der Optimierer optimiert die analysierten Anweisungen.

Bevor die Abfrage analysiert wird, überprüft der Server zunächst den Abfragecache. Wenn das entsprechende Abfrageergebnis darin gefunden werden kann, ist keine Abfrageanalyse, Optimierung usw. erforderlich, und das Abfrageergebnis wird angezeigt direkt zurückgegeben. Gespeicherte Prozeduren, Trigger, Ansichten usw. werden alle in dieser Ebene implementiert.

Die dritte Schicht ist die Speicher-Engine Die Speicher-Engine ist für das Speichern von Daten in MySQL, das Extrahieren von Daten, das Starten einer Transaktion usw. verantwortlich. Die Speicher-Engine kommuniziert mit der oberen Ebene über APIs. Diese APIs schirmen die Unterschiede zwischen verschiedenen Speicher-Engines ab und machen diese Unterschiede für den Abfrageprozess der oberen Ebene transparent. Die Speicher-Engine analysiert SQL nicht. Die am häufigsten verwendete Speicher-Engine für MySQL ist InnoDB.

2. Parallelitätskontrolle von MySQL

Wenn mehrere Threads gleichzeitig Daten verarbeiten, kann es zu Problemen bei der Parallelitätskontrolle kommen.

2-1. Lese-/Schreibsperre

Wenn mehrere Threads nur Daten lesen, können sie diese tatsächlich gemeinsam lesen, ohne sich gegenseitig zu beeinflussen Verwenden Sie „Read Lock“, auch Shared Lock genannt.

Threads, die Lesesperren erwerben, blockieren sich nicht gegenseitig und können gleichzeitig eine Ressource lesen.

Wenn ein Thread Daten schreiben muss, sollte er eine „Schreibsperre“ verwenden, auch exklusive Sperre genannt.

Schreibsperren blockieren andere Schreibsperren und Lesesperren, bis der Schreibvorgang abgeschlossen ist.

2-2. Sperrgranularität

Klären Sie zunächst ein Konzept: Je weniger Daten auf einer bestimmten Ressource gesperrt werden müssen, desto höher ist die Parallelität Je höher das System ist, desto höher ist es.

Aber das Sperren verbraucht auch Ressourcen. Wenn das System viel Zeit damit verbringt, Sperren zu verwalten, anstatt auf Daten zuzugreifen,

dann kann die Leistung des Systems beeinträchtigt sein.

Eine gute „Sperrstrategie“ besteht also darin, ein Gleichgewicht zwischen Sperraufwand und Datensicherheit zu finden.

Jede Speicher-Engine kann Ihre eigene Sperrstrategie und Sperre implementieren Granularität.

2-3. Tabellensperren und Zeilensperren

Tabellensperren sperren, wie der Name schon sagt, die gesamte Tabelle. Der Aufwand für die Tabellensperre ist relativ gering. Nach dem Hinzufügen einer Schreibsperre zur Tabelle werden alle Lese- und Schreibvorgänge anderer Benutzer für die Tabelle blockiert.

Obwohl die Speicher-Engine in MySQL eigene Sperren bereitstellen kann, verwendet MySQL manchmal Tabellensperren, z. B. Anweisungen wie ALTER TABLE.

Schreibsperren haben eine höhere Priorität als Lesesperren, daher kann eine Schreibsperranforderung an den Anfang der Lesesperrenwarteschlange eingefügt werden.

Das Sperren auf Zeilenebene sperrt die gesamte Zeile, was die gleichzeitige Verarbeitung weitestgehend unterstützen kann, aber der Aufwand für das Entsperren ist auch relativ hoch. Sperren auf Zeilenebene werden nur auf der Ebene der Speicher-Engine implementiert.

Alle Speicher-Engines implementieren Sperren auf Zeilenebene auf ihre eigene Weise.

3. MVCC

MVCC ist „Mehrversions-Parallelitätskontrolle“. Man kann davon ausgehen, dass MVCC eine Variante der Sperrung auf Zeilenebene ist, aber es vermeidet das Hinzufügen In vielen Fällen sind zusätzliche Sperren

daher kostengünstiger.

Mainstream-relationale Datenbanken implementieren alle MVCC, aber die Implementierungsmechanismen sind unterschiedlich. Tatsächlich verfügt MVCC nicht über einen einheitlichen Standard.

Aber die meisten von ihnen implementieren nicht blockierende Lesevorgänge und Schreibvorgänge sperren nur notwendige Zeilen.

MVCC stellt sicher, dass die in jeder Transaktion während der Ausführung angezeigten Daten konsistent sind.

Da jedoch verschiedene Transaktionen zu unterschiedlichen Zeiten beginnen, können die gleichzeitig angezeigten Daten für dieselbe Tabelle unterschiedlich sein.

Die InnoDB-Engine von MySQL wird implementiert, indem zwei versteckte Spalten hinter jeder Datensatzzeile gespeichert werden.

Einer speichert die Erstellungszeit der Zeile und der andere speichert die Ablaufzeit (oder Löschzeit) der Zeile.

Tatsächlich wird kein tatsächlicher Zeitstempel gespeichert, sondern eine „Systemversionsnummer“.

Jedes Mal, wenn eine Transaktion gestartet wird, wird die Systemversionsnummer erhöht. Wenn eine Transaktion gestartet wird, wird die Systemversionsnummer als Versionsnummer der Transaktion verwendet und zum Vergleich mit der Versionsnummer der abgefragten Zeile verwendet.

Im Folgenden wird erläutert, wie Versionsnummern in gängigen CRUD-Operationen funktionieren:

INSERT

Speichern Sie die aktuelle Systemversion als Zeilenversionsnummer

LÖSCHEN

Speichern Sie die aktuelle Systemversionsnummer in der „Löschversion“ dieser Datenzeile.

UPDATE

Fügen Sie eine neue Zeile mit Datensätzen ein, speichern Sie die aktuelle Systemversionsnummer als Navigationsversionsnummer und speichern Sie die aktuelle Systemversionsnummer in der „Löschversion“ der ursprünglichen Zeile.

SELECT

Findet nur Zeilen, deren Version älter als die aktuelle Transaktionsversion ist. Dadurch wird sichergestellt, dass die von der Transaktion gelesenen Zeilen entweder bereits vorhanden sind,

oder von der Transaktion selbst eingefügt oder geändert wurden. Die „Löschversion“ der Zeile

ist entweder undefiniert oder größer als die aktuelle Transaktionsversionsnummer. Dadurch wird sichergestellt, dass die von der Transaktion gelesenen Zeilen

nicht vor der Transaktion gelöscht wurden.

MVCC funktioniert nur unter den beiden Isolationsstufen REPEATABLE READ und READ COMMITTED, die anderen beiden Isolationsstufen können nicht funktionieren.

Weil READ UNCOMMITTED immer die neuesten Daten liest und nicht die Datenzeilen, die mit der aktuellen Transaktionsversion übereinstimmen. Und SERIALIZABLE sperrt alle gelesenen Zeilen.

Die oben genannten Fragen zur Parallelitätskontrolle sind für Sie zusammengestellt. Weitere verwandte Fragen finden Sie in den entsprechenden Tutorials auf der chinesischen PHP-Website.

Empfohlenes Video-Tutorial: https://www.php.cn/course/list/51/type/2.html

Das obige ist der detaillierte Inhalt vonPrinzip der MySQL-Parallelitätskontrolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Parallelitätskontrolle und Thread-Sicherheit im Java-Sammlungsframework Parallelitätskontrolle und Thread-Sicherheit im Java-Sammlungsframework Apr 12, 2024 pm 06:21 PM

Das Java-Sammlungsframework verwaltet die Parallelität durch threadsichere Sammlungen und Mechanismen zur Parallelitätskontrolle. Thread-sichere Sammlungen (wie CopyOnWriteArrayList) garantieren Datenkonsistenz, während nicht-threadsichere Sammlungen (wie ArrayList) eine externe Synchronisierung erfordern. Java bietet Mechanismen wie Sperren, atomare Operationen, ConcurrentHashMap und CopyOnWriteArrayList, um die Parallelität zu steuern und so die Datenintegrität und -konsistenz in einer Multithread-Umgebung sicherzustellen.

Überlegungen zur C#-Entwicklung: Multithread-Programmierung und Parallelitätskontrolle Überlegungen zur C#-Entwicklung: Multithread-Programmierung und Parallelitätskontrolle Nov 22, 2023 pm 01:26 PM

In der C#-Entwicklung sind Multithread-Programmierung und Parallelitätskontrolle angesichts wachsender Daten und Aufgaben besonders wichtig. In diesem Artikel werden einige Dinge vorgestellt, auf die bei der C#-Entwicklung aus zwei Aspekten geachtet werden muss: Multithread-Programmierung und Parallelitätskontrolle. 1. Multithread-Programmierung Multithread-Programmierung ist eine Technologie, die Multi-Core-Ressourcen der CPU nutzt, um die Programmeffizienz zu verbessern. In C#-Programmen kann Multithread-Programmierung mithilfe der Thread-Klasse, ThreadPool-Klasse, Task-Klasse und Async/Await implementiert werden. Aber bei der Multithread-Programmierung

Integration und Erweiterung der Parallelitätskontrolle von Golang-Funktionen und Bibliotheken von Drittanbietern Integration und Erweiterung der Parallelitätskontrolle von Golang-Funktionen und Bibliotheken von Drittanbietern Apr 25, 2024 am 09:27 AM

Die gleichzeitige Programmierung wird in Go über Goroutine- und Parallelitätskontrolltools (wie WaitGroup, Mutex) implementiert, und Bibliotheken von Drittanbietern (wie sync.Pool, sync.semaphore, queue) können zur Erweiterung ihrer Funktionen verwendet werden. Diese Bibliotheken optimieren gleichzeitige Vorgänge wie Aufgabenverwaltung, Ressourcenzugriffsbeschränkungen und Verbesserungen der Codeeffizienz. Ein Beispiel für die Verwendung der Warteschlangenbibliothek zur Verarbeitung von Aufgaben zeigt die Anwendung von Bibliotheken von Drittanbietern in tatsächlichen Parallelitätsszenarien.

Parallelitätskontrollstrategie und Techniken zur Leistungsoptimierung von http.Transport in der Go-Sprache Parallelitätskontrollstrategie und Techniken zur Leistungsoptimierung von http.Transport in der Go-Sprache Jul 22, 2023 am 09:25 AM

Parallelitätskontrollstrategien und Techniken zur Leistungsoptimierung von http.Transport in der Go-Sprache In der Go-Sprache kann http.Transport zum Erstellen und Verwalten von HTTP-Anforderungsclients verwendet werden. http.Transport wird häufig in der Standardbibliothek von Go verwendet und bietet viele konfigurierbare Parameter sowie Funktionen zur Parallelitätskontrolle. In diesem Artikel besprechen wir, wie Sie die Parallelitätskontrollstrategie von http.Transport nutzen können, um die Leistung zu optimieren, und zeigen einige funktionierende Beispielcodes. eins,

Der Einfluss der Parallelitätskontrolle von Golang-Funktionen auf Leistung und Optimierungsstrategien Der Einfluss der Parallelitätskontrolle von Golang-Funktionen auf Leistung und Optimierungsstrategien Apr 24, 2024 pm 01:18 PM

Die Auswirkungen der Parallelitätskontrolle auf die Leistung von GoLang: Speicherverbrauch: Goroutinen verbrauchen zusätzlichen Speicher, und eine große Anzahl von Goroutinen kann zu Speichererschöpfung führen. Planungsaufwand: Das Erstellen von Goroutinen verursacht einen Planungsaufwand, und das häufige Erstellen und Löschen von Goroutinen beeinträchtigt die Leistung. Sperrkonkurrenz: Eine Sperrsynchronisierung ist erforderlich, wenn mehrere Goroutinen auf gemeinsame Ressourcen zugreifen. Sperrkonkurrenz führt zu Leistungseinbußen und längerer Latenz. Optimierungsstrategie: Goroutinen richtig nutzen: Goroutinen nur bei Bedarf erstellen. Begrenzen Sie die Anzahl der Goroutinen: Verwenden Sie Channel oder sync.WaitGroup, um die Parallelität zu verwalten. Vermeiden Sie Sperrenkonflikte: Verwenden Sie sperrenfreie Datenstrukturen oder minimieren Sie Sperrhaltezeiten

Wie verwende ich verteilte Sperren, um den gleichzeitigen Zugriff in MySQL zu steuern? Wie verwende ich verteilte Sperren, um den gleichzeitigen Zugriff in MySQL zu steuern? Jul 30, 2023 pm 10:04 PM

Wie verwende ich verteilte Sperren, um den gleichzeitigen Zugriff in MySQL zu steuern? In Datenbanksystemen ist ein hoher gleichzeitiger Zugriff ein häufiges Problem, und verteilte Sperren sind eine der häufigsten Lösungen. In diesem Artikel wird die Verwendung verteilter Sperren in MySQL zur Steuerung des gleichzeitigen Zugriffs vorgestellt und entsprechende Codebeispiele bereitgestellt. 1. Prinzip Verteilte Sperren können zum Schutz gemeinsam genutzter Ressourcen verwendet werden, um sicherzustellen, dass nur ein Thread gleichzeitig auf die Ressource zugreifen kann. In MySQL können verteilte Sperren folgendermaßen implementiert werden: Erstellen Sie eine Datei mit dem Namen lock_tabl

MySQL und Oracle: Vergleich der Unterstützung für Mehrversions-Parallelitätskontrolle und Datenkonsistenz MySQL und Oracle: Vergleich der Unterstützung für Mehrversions-Parallelitätskontrolle und Datenkonsistenz Jul 12, 2023 pm 01:10 PM

MySQL und Oracle: Vergleich der Unterstützung für Mehrversions-Parallelitätskontrolle und Datenkonsistenz Einführung: In heutigen datenintensiven Anwendungen spielen Datenbanksysteme eine zentrale Rolle bei der Realisierung der Datenspeicherung und -verwaltung. MySQL und Oracle sind zwei bekannte relationale Datenbankverwaltungssysteme (RDBMS), die in Anwendungen auf Unternehmensebene weit verbreitet sind. In einer Mehrbenutzerumgebung sind die Sicherstellung der Datenkonsistenz und die Kontrolle der Parallelität wichtige Funktionen des Datenbanksystems. In diesem Artikel werden die Parallelitätskontrolle und Daten mehrerer Versionen zwischen MySQL und Oracle geteilt.

Projekterfahrungsanalyse für verteilte MySQL-Transaktionsverarbeitung und Parallelitätskontrolle Projekterfahrungsanalyse für verteilte MySQL-Transaktionsverarbeitung und Parallelitätskontrolle Nov 02, 2023 am 09:01 AM

Analyse der Erfahrungen mit verteilten MySQL-Transaktionsverarbeitungs- und Parallelitätskontrollprojekten In den letzten Jahren sind mit der rasanten Entwicklung des Internets und der zunehmenden Anzahl von Benutzern auch die Anforderungen an Datenbanken gestiegen. In großen verteilten Systemen spielt MySQL als eines der am häufigsten verwendeten relationalen Datenbankverwaltungssysteme seit jeher eine wichtige Rolle. Mit zunehmender Datengröße und zunehmendem gleichzeitigen Zugriff stehen die Leistung und Skalierbarkeit von MySQL jedoch vor großen Herausforderungen. Insbesondere in einer verteilten Umgebung ist die Handhabung von Transaktionen und die Steuerung der Parallelität zu einem dringenden Lösungsbedarf geworden.

See all articles