Heim  >  Artikel  >  Datenbank  >  Was ist ein Riegel? Der Unterschied zwischen Riegel und Schloss

Was ist ein Riegel? Der Unterschied zwischen Riegel und Schloss

PHP中文网
PHP中文网Original
2017-06-20 15:05:548737Durchsuche

Latch

Was ist Latch:

Sperren sind ein Schlüsselmerkmal, das Datenbanksysteme von Dateisystemen unterscheidet. Sperrmechanismen werden verwendet, um den gleichzeitigen Zugriff auf gemeinsam genutzte Ressourcen zu verwalten. InnodbDie Speicher-Engine sperrt Tabellendaten auf Zeilenebene, was gut ist. Aber Innodb verwendet auch Sperren an mehreren Stellen, sodass mehrere verschiedene Ressourcen gleichzeitigen Zugriff ermöglichen können. Betreiben Sie beispielsweise die vom Pufferpool zusammengefasste LRU-Liste, löschen, fügen Sie Elemente in der LRU-Liste hinzu Um die Konsistenz sicherzustellen, muss eine Sperre vorhanden sein, nämlich die Latch-Sperre. Der Unterschied zwischen

Latch und Lock

Latch ist Im Allgemeinen handelt es sich um einen Riegel (ein leichtes Schloss), da die erforderliche Verriegelungszeit sehr kurz sein muss. Wenn es über einen längeren Zeitraum anhält, wird die Leistung der Anwendung sehr schlecht sein. In der Innodb-Speicher-Engine kann Latch in Mutex (gegenseitig) unterteilt werden Ausschluss) und RW-Lock (Lese-/Schreibsperre).

Und das Sperre-Objekt ist eine Transaktion, die zum Sperren von Objekten in der Datenbank, wie Tabellen, Zeilen und Seiten, verwendet wird. Und im Allgemeinen werden die Objekte der Sperre erst nach der Transaktion Commit oder Rollback (Die Veröffentlichungszeit für verschiedene Transaktionsisolationsstufen kann unterschiedlich sein). Darüber hinaus ist lock, wie in den meisten Datenbanken, blockiert.

Gleiches wie show engine innodb mutex to viewlatch

Name

zeigt die Informationen von Latch und den Speicherort (Anzahl der Zeilen) des Quellcodes an .

Latch Klassifizierung

ist unterteilt in: Mutex: Mutex erfordert manchmal einige Ressourcen Teilen und Parallelität, aber sie sind nicht sehr häufig, daher sind die Beantragung eines Mutex vom Betriebssystem, Mutex alle exklusiv.

RW-LATCH:

Lese-/Schreibsperre

LatchVerstehen:

Ein Beispiel:

Wenn wir auswählen ausführen, werden die Daten im Pufferpool zwischengespeichert. Ja, Mehrere Threads, die gleichzeitig auf diese Daten zugreifen oder diese ändern, müssen einen Parallelitätskontrollmechanismus erfordern. Dies ist latch

Die Daten, auf die die Datenbank zugreifen soll, müssen zuerst im Cache gespeichert werden, und der Cache ist im Allgemeinen kleiner als der Speicherplatz. Der Datenpuffer verwendet die Hash-Tabelle, um aufzuzeichnen, ob die Die Datenseite befindet sich im Speicher. Der entsprechende RW-Latch in MySQL ist im Errlog sehr gut ausgedrückt , der RW-Latch wird in buf0sea.cc in Zeile 658 erstellt von RW-Latch.

Sehen Sie sich das Stresstest-Beispiel von errorlog an:

Dem Protokoll zufolge können wir analysieren, dass der Thread 140140355766016 dem Datensatz eine x-Sperre hinzufügen möchte, aber der wartende Thread 0x4c407b8 Freigabe des RW-Latch des Threads.

LatchInhaltsprozess

1) a Zugriff auf die verknüpfte Liste mit x

2)b Warten in der Schlangexentsperrt belegte CPU, aber CPU hat dich gefunden Warten Sie, damit CPU b aus der

3) Zeit herauswirft die Kette, es ist Zeit, nach Daten zu suchen.

4)bIch weiß es sehr gutaschnell so, b Stellen Sie sich nicht in die Warteschlange, sondern gehen Sie zum Spin , also im Leerlauf CPU, und dann schauen Sie es sich noch einmal an. Überprüfen Sie die Speicherdatenstruktur, a ist entsperrt

5) b übertragen Nach einer Runde, im Zeitraum von bspin, kam c herein und Nach dem Drehen, Betriebssystem wartet

6

) Das Betriebssystem wird bKick Latch von

CPU

Sperrfunktionen:

  • 1.Keine Warteschlange

  • 2 🎜>

    3.os wartet
  • 4.cpu
  • beschäftigt
  • Mutex:

 Speicherstruktur Sehr klein Die Datenbank wird vom Betriebssystem beantragt und belegt nicht den Pufferpool, völlig exklusiv

Der Mutex-Sperrhalteprozess: 

 Ein Thread hält eine 1

b

Der Thread sieht, dass die Speicherdatenstruktur Zahlen hat, und geht dann zu spin

bestätigen Latch Konflikttyp:

(dies ist Anweisung 173 im Quellcode), abgerufen durch Fehlerprotokoll

LatchDer Konfliktprozess

Die verknüpfte Liste enthält einen KettenschutzmechanismusLatch , eine kleine Speicherstruktur. Zu diesem Zeitpunkt wird ein Lesethread a aufgerufen, um die Kette zu lesen. Zu diesem Zeitpunkt wird die Verwaltung zu r , Lesesperre. Wenn Daten in der Kette (read) gefunden werden, geben Sie die Lesesperre frei, sobald sie angezeigt wird gefunden wird, muss auch b gelesen werden. Zu diesem Zeitpunkt sieht es aus wie r kann geteilt werden, und sie greift auch auf die Kette zu und liest sie. c ändert den Inhalt von zwei Blöcken in der Kette. Es stellt sich heraus, dass es sich um r, r und w schließen sich gegenseitig aus und können auch nicht gleichzeitig ausgeführt werden 1

, aktiv zum Beenden der

CPU 2

auffordern, leere

CPU belegen Ressourcen (führen Sie einen leeren Code aus, Schleife, prüfen Sie nach einer Weile, ob a und b wurden aufgebraucht (Spin), aber in diesem Prozess, weil c nicht in der Warteschlange steht Beim Warten können andere Threads die Kette belegen, während sie mehrmals ausgeführt werden. Möglicherweise ist dies der Fall: Ruhezustand, Beenden CPU) Warum ist es untätig (Angst, dass das Betriebssystem ihn gewaltsam wegzieht, wenn es ihre Untätigkeit sieht) usw. (Weil er das weiß a und b belegen Ressourcen für relativ kurze Zeit, d. h. die Zeit zum Durchlaufen einer Kette ist sehr kurz. Latch

-Konfliktphänomen:

1

,

Latch-Konflikt wird als angezeigt CPUBeschäftigt2

,

LatchInhalt steht nicht in der Warteschlange, warten Sie auf einen zufälligen Zeitraum. Kommen Sie zurück und werfen Sie einen Blick auf die Zeit

Überwachungsindikatoren

----------

SEMAPHORES

----------

OS WAIT ARRAY INFO: Reservierungsanzahl 2

OS WAIT ARRAY INFO: Signalanzahl 2

RW-shared dreht 0, Runden 4, OS wartet 2

RW-excl dreht 0, Runden 0, OS wartet 0

RW-sx dreht 0, Runden 0, OS wartet 0

Spin-Runden pro Wartezeit: 4,00 RW-shared, 0,00 RW-excl, 0,00 RW-sx

Runden

bedeutet, jedes Mal nach den Parametern der Rotation zu fragen

OS wartet: bedeutet Schlaf Wenn das plötzliche Wachstum relativ schnell ist, bedeutet dies, dass Latch Konflikt ist ernst.

rw-shared spin mal

rw-excl spinAnzahl von Malen

LatchStreitgründe

1, Speicherzugriff zu häufig (weitersuchen)

2, ListeDie Kette ist zu lang (wenn 10000 an der Kette hängt, ist die Chance, festgehalten zu werden, zu hoch)

Manchmal erhöhen wir also die Anzahl der Instanzen und teilen den großen Pool in kleinerePool auf , machen Sie die Liste Kette kürzer

So reduzieren Sie den Latch-Konflikt:

Wenn der Latch-Konflikt schwerwiegend ist

1.OptimierenSQL, reduzieren Sie die Anzahl der Speicherlesevorgänge——Der Effekt ist offensichtlicher

2.ErhöhungInstanzen Die Anzahl der

So finden Sie die Lösung genaulatch

1.show engine Innodb mutex

2 .Überprüfen Sie, welche Art vonLatch

3.Suchen SieSQL

Das obige ist der detaillierte Inhalt vonWas ist ein Riegel? Der Unterschied zwischen Riegel und Schloss. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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