Heim  >  Artikel  >  Datenbank  >  Beispiele für Transaktionen und Parallelitätsprobleme in Datenbanken

Beispiele für Transaktionen und Parallelitätsprobleme in Datenbanken

零下一度
零下一度Original
2017-07-03 16:10:391303Durchsuche

Diskussion über Transaktionen und Parallelitätsprobleme in Datenbanken

Einführung

Kürzlich hat ein Kollege einen Code geschrieben, der für die Logik der Auftragserstellung verantwortlich ist festgestellt, dass es möglicherweise Probleme mit der Parallelität gibt. Mein Kollege war anderer Meinung. Er dachte, dass seine Logik in der gespeicherten Prozedur geschrieben sei und es kein Problem geben sollte.

Die Logik des Codes ist ungefähr (Pseudocode):

begin transaction

if 查询到客户存在进行中的订单
 rollback transaction

if 查询到设备存在进行中的订单
 rollback transaction

插入订单

commit transaction

Im Folgenden wird diese Logik analysiert und erläutert, warum diese Transaktion Parallelitätsprobleme haben wird.

Transaktionsübersicht

Stellen Sie zunächst zwei Fragen, besprechen Sie dann die mit der Transaktion verbundenen Wissenspunkte mit den Fragen und lösen Sie schließlich diese beiden Fragen und beantworten Sie die vorherigen Fragen.

Die erste Frage: Können Transaktionen gleichzeitig sein?

Die zweite Frage: Wie isoliert die Datenbank Transaktionen?

Leistungsmerkmale von Transaktionen

Die Ausführung von Transaktionen in der Datenbank umfasst viele Aspekte, darunter den Umgang mit kritischen Ressourcen, das Sperren und Entsperren usw. Unabhängig davon, wie die Transaktion ausgeführt wird, müssen jedoch die folgenden Eigenschaften gewährleistet sein:

  • Atomizität

  • Konsistenz

  • Isolation

  • Persistenz

  • Atomizität: Alle Vorgänge sind eine logische Einheit, entweder erfolgreich übermittelt oder fehlgeschlagen; Konsistenz: Es werden nur zulässige Daten in die Datenbank geschrieben, andernfalls wird die Transaktion auf den ursprünglichen Zustand zurückgesetzt.

    Isolierung: Mehrere Transaktionen dürfen gleichzeitig ausgeführt werden, ohne dass die Richtigkeit der Datenstabilität und -integrität beeinträchtigt wird ;

    Persistenz: Nach Abschluss der Transaktion werden die übermittelten Ergebnisse verfestigt und gespeichert.

    Verschiedene Datenbanksperren

    Gemeinsame Sperren
  1. Gemeinsame Sperren werden für nicht exklusive Geschäfte verwendet und ermöglichen mehrere Transaktionen. Liest sich auch die gesperrte Ressource, lässt jedoch nicht zu, dass die Ressource aktualisiert wird.

Sperrzeitpunkt: Beim Ausführen der Select-Anweisung wird diese standardmäßig hinzugefügt
  • Entsperrzeitpunkt: Wird standardmäßig nach der Ausführung des Lesevorgangs freigegeben
  • Kompatibilität mit anderen Sperren: Wenn eine gemeinsame Sperre für die Daten festgelegt ist, sind keine gemeinsamen Sperren und exklusiven Sperren mehr zulässig
  • Parallelitätsleistung : mit guter Parallelitätsleistung
    1. Exklusive Sperre
    2. Exklusive Sperre, auch exklusive Sperre genannt. Wie der Name schon sagt, erlaubt eine durch eine exklusive Sperre gesperrte Ressource anderen Transaktionen nicht, Vorgänge auszuführen.

    Sperrzeitpunkt: Beim Ausführen von Einfügen, Aktualisieren,
  • Löschen

    wird es standardmäßig hinzugefügt

  • Entsperrzeitpunkt: Kann nur sein nach der Transaktion freigegeben
  • Kompatibilität: Wenn andere Sperren für die Daten vorhanden sind, können keine exklusiven Sperren hinzugefügt werden. Exklusive Sperren erlauben nicht das gleichzeitige Hinzufügen anderer Sperren
  • Parallelitätsleistung: Andere Transaktionen müssen auf das Ende der vorherigen Transaktion warten, bevor sie ausgeführt werden können. Sie können nicht gleichzeitig ausgeführt werden und können nur seriell ausgeführt werden
    1. Aktualisierungssperre
    2. Wird verwendet, um die erforderlichen Ressourcen in der Anfangsphase der Aktualisierung zu sperren, um einen Deadlock zu verhindern, der durch die Verwendung gemeinsamer Sperren während der Lesephase verursacht wird.

    Sperrzeitpunkt: Verwenden Sie beim Ausführen eines Updates die Updatesperre, um zugehörige Ressourcen zu sperren.
  • Entsperrzeitpunkt: Nach dem Lesen wird beim Ausführen eines Updatevorgangs die Updatesperre aktualisiert Für exklusive Sperren
  • Kompatibilität: Aktualisierungssperren sind mit gemeinsam genutzten Sperren kompatibel, d. h. Aktualisierungssperren und gemeinsam genutzte Sperren können gleichzeitig vorhanden sein, es kann jedoch nur eine Aktualisierungssperre vorhanden sein
  • Parallelitätsleistung: In der frühen Lesephase des Updates kann es anderen Transaktionen gestattet werden, Ressourcen zu lesen, und begrenzte Parallelität ist nicht zulässig, wenn Ressourcen in der späteren Phase exklusiv sind.
  • Transaktionsisolationsstufe
  • Es gibt vier allgemeine Transaktionsisolationsstufen, und SQL Server verfügt über zusätzliche erweiterte Stufen, die ich hier nicht im Detail vorstellen werde.

      Serialisierbar
    1. Funktioniert wie wiederholbare Lesevorgänge. Aber es sperrt nicht nur die betroffenen Daten, sondern auch den Bereich. Dadurch wird verhindert, dass neue Daten in den von der Abfrage abgedeckten Bereich eingefügt werden, was zu Phantomlesevorgängen führen kann.

      Wiederholbares Lesen (wiederholbares Lesen)
    1. Lesen Sie Daten wie die festgeschriebene Leseebene, behalten Sie jedoch die gemeinsame Sperre bis zum Ende der Transaktion bei.

      Commit lesen
    1. Lesen Sie nur die festgeschriebenen Daten und warten Sie, bis andere Transaktionen die exklusive Sperre aufheben. Die gemeinsame Sperre zum Lesen von Daten wird sofort nach Abschluss des Lesevorgangs freigegeben. „Read Committed“ ist die Standardisolationsstufe von SQL Server.

      Uncommited lesen
    1. Beim Lesen von Daten werden keine Sperren überprüft oder verwendet. Daher ist es in dieser Isolationsstufe möglich, nicht festgeschriebene Daten zu lesen.

    Beantworten Sie die vorherige Frage

    Die erste Frage: Können Transaktionen gleichzeitig sein?

    Die Antwort lautet: Ja, um die Leistung zu verbessern, erlaubt die Datenbank mehrere gleichzeitige Transaktionen

    Transaktionsvorgang

    , diese Transaktion hat nichts mit der Initiierungsmethode zu tun Verwenden Sie zum Initiieren eine gespeicherte Prozedur oder verwenden Sie zum Initiieren einen normalen SQL-Befehl. Es gibt keinen Unterschied. Die zweite Frage ist: Wie isoliert die Datenbank Transaktionen?

    Um diese Frage zu beantworten, müssen Sie zunächst den Sperrmechanismus und die Isolationsstufe der Datenbanktransaktion in der Datenbank verstehen. Sperren in der Datenbank können in drei Typen unterteilt werden: gemeinsame Sperren, exklusive Sperren und Aktualisierungssperren. Verwenden Sie unterschiedliche Sperrstufen und arbeiten Sie mit unterschiedlichen Sperrbereichen zusammen, um unterschiedliche Transaktionsisolationsstufen zu erreichen und auf dieser Basis Transaktionen gleichzeitig oder seriell auszuführen.

    Die dritte Frage: Warum weist die Transaktion am Anfang dieses Artikels Parallelitätsprobleme auf?

    Da „select“ zu Beginn der Transaktion ausgeführt wird und „select“ eine gemeinsame Sperre verwendet, ist es möglich, dass gleichzeitige Transaktionen „select“ gleichzeitig ausführen, was dazu führt, dass sie denken, dass es sich bei allen um einen legalen Vorgang handelt Zeit und Warteschlange für die Ausführung nachfolgender Transaktionen. Dadurch ist es tatsächlich möglich, doppelte Daten einzufügen, z. B. wenn nur noch ein Produkt übrig ist, aber zwei Kundenaufträge erstellt werden.

    So verhindern Sie Parallelitätsprobleme

    1. In einer Transaktion

    Gemäß dem, was zuvor gesagt wurde, mit Einfügen, Aktualisieren oder Das Löschen kann in einer Transaktion erfolgen. Die Standardtransaktionsebene führt künstlich zu einer Transaktionsserialisierung, sodass Sie mit update zu Beginn der Transaktion gemeinsame Daten aktualisieren können. In diesem Fall werden Transaktionen desselben Typs serialisiert und dann hinzugefügt Beurteilungsaussage , Wird verwendet, um zu bestimmen, ob nachfolgende Transaktionsinhalte ausgeführt werden sollen. Dies reicht aus, um sicherzustellen, dass alle Vorgänge ordnungsgemäß und rechtmäßig durchgeführt werden. Der einzige Nachteil besteht darin, dass es zu Leistungsproblemen kommen kann.

    1. Außerhalb der Transaktion

    Es gibt immer mehr verteilte Systeme, aber neu verteilte Systeme verfügen auch über einige gemeinsam genutzte Ressourcen, wie z. B. Redis oder Zookeeper , können Sie Redis oder Zookeeper verwenden, um einige verteilte Sperren zu erstellen (dieser Typ gehört zu anderen Blog-Beiträgen und wird hier nicht näher erläutert). Die Verwendung von Sperren außerhalb der Transaktion zum Serialisieren von Transaktionen desselben Typs und die anschließende Zusammenarbeit mit dem internen Prüfmechanismus der Transaktion reichen aus, um sicherzustellen, dass das Parallelitätsproblem der Transaktion gelöst wird.

    Referenzmaterialien

  • Probleme und Verarbeitung der Transaktionsparallelität

  • Die vier Hauptmerkmale von Datenbanktransaktionen und der Isolationsgrad von Transaktionen

  • Datenbanktransaktionen und Parallelität

  • Isolationsebene von SQL Server-Transaktionen


  • Das obige ist der detaillierte Inhalt vonBeispiele für Transaktionen und Parallelitätsprobleme in Datenbanken. 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