So fragen Sie die neueste Transaktions-ID in MySQL ab

So fragen Sie die neueste Transaktions-ID in MySQL ab

Vorne geschrieben: Manchmal müssen Sie möglicherweise die neueste Transaktions-ID anzeigen, um bestimmte geschäftslogische Beurteilungen vorzunehmen (z. B. anhand der Änderungen der Transaktions-ID und der Zeitdifferenz davor und danach die Antwortzeit jeder Transaktion zu berechnen usw.).

Grundsätzlich gibt es zwei Möglichkeiten, die aktuelle Transaktions-ID anzuzeigen:

1. Führen Sie SHOW ENGINE INNODB STATUS aus, um transaktionsbezogene Informationen anzuzeigen

=====================================
150303 17:16:11 INNODB MONITOR-AUSGABE
=====================================
Sekundendurchschnittliche Werte, berechnet aus den letzten 15 Sekunden
...
------------
TRANSAKTIONEN
TRX-ID-Zähler 3359877657 – Aktuelle maximale Transaktions-ID
Bereinigung für TRXs Nr. < 3359877468 abgeschlossen, Rückgängigmachen Nr. < 0, Status: Wird ausgeführt
Länge der Verlaufsliste 324
LISTE DER TRANSAKTIONEN FÜR JEDE SITZUNG:
---TRANSACTION 0, nicht gestartet -- Das Ausführen von SHOW ENGINE INNODB STATUS in dieser Sitzung generiert keine Transaktion, daher ist die Transaktions-ID 0.
MySQL-Thread-ID 4692367, OS-Thread-Handle 0x51103940, Abfrage-ID 677284426 xx.173ops.com 10.xxx yejr init
ANZEIGEN /*!50000 ENGINE*/ INNODB STATUS
---TRANSACTION 3359877640, nicht gestartet -- Inaktive Transaktion, nicht gestartet. Verwendete MySQL-Tabellen 1, gesperrt 0
MySQL-Thread-ID 4678384, OS-Thread-Handle 0x41a57940, Abfrage-ID 677284427 xx.173ops.com 10.xxx yejr Systemsperre
Wählen Sie polinfo0_.Fid als Fid39_0_, ...

---TRANSAKTION 3359877652, nicht gestartet
MySQL-Thread-ID 4678383, OS-Thread-Handle 0x50866940, Abfrage-ID 677284420 xx.173ops.com 10.xxx yejr, wird bereinigt

---TRANSACTION 3359877635, AKTIV 1358 Sek., Thread in InnoDB 5000 deklariert -- Aktive lange Transaktion, läuft seit 1358 Sekunden und ist noch nicht abgeschlossen. Bitte beachten Sie, dass dies zu einer großen Anzahl von Sperrwartezeiten führen kann. Verwendete MySQL-Tabellen: 1, gesperrt 1
1 Sperrstruktur(en), Heap-Größe 376, 0 Zeilensperre(n), Undo-Log-Einträge 1
MySQL-Thread-ID 3120717, OS-Thread-Handle 0x529b4940, Abfrage-ID 677284351 xx.173ops.com 10.xxx yejr Abfrageende
in t_live_room einfügen ...

2. Überprüfen Sie die drei Tabellen INFORMATION_SCHEMA.INNODB_TRX, INNODB_LOCKS und INNODB_LOCK_WAITS. Anhand dieser Informationen können Sie schnell feststellen, welche Transaktionen andere Transaktionen blockieren.

Fragen Sie zunächst die Tabelle INNODB_TRX ab, um zu sehen, welche Transaktionen vorhanden sind

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G
*************************** 1. Reihe ***************************
 trx_id: 17778 – Aktuelle Transaktions-ID
 trx_state: LOCK WAIT – im Wartezustand für Sperren, d. h., es wird darauf gewartet, dass andere Sitzungen Sperrressourcen freigeben. trx_started: 04.03.2015 10:40:26
 trx_requested_lock_id: 17778:82:3:6 – Die anzufordernde Sperre trx_wait_started: 2015-03-04 10:40:26
 trx_weight: 2 -- Das bedeutet, dass die Sperre 2 Zeilen von Datensätzen betrifft trx_mysql_thread_id: 657 -- Die Thread-ID in der Prozessliste
 trx_query: Aktualisiere trx_fee, setze Gebühr=rand()*1000, wobei ID=4
 trx_operation_state: Indexlesen wird gestartet
 trx_tables_in_use: 1
 trx_tables_locked: 1
 Anzahl der Lockstrukturen: 2
 trx_lock_memory_bytes: 360
 trx_rows_locked: 1
 trx_rows_modified: 0
 trx_concurrency_tickets: 0
 trx_isolation_level: WIEDERHOLBARES LESEN
 trx_unique_checks: 1
 trx_foreign_key_checks: 1
 trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
 trx_adaptive_hash_timeout: 10000
 trx_ist_schreibgeschützt: 0
 trx_autocommit_non_locking: 0
 *************************** 2. Reihe ***************************
 trx_id: 17773
 trx_state: LÄUFT
 trx_started: 04.03.2015 10:40:23
 trx_requested_lock_id: NULL
 trx_wait_started: NULL
 trx_gewicht: 10
 trx_mysql_thread_id: 656
 trx_query: NULL
 trx_operation_state: NULL
 trx_tables_in_use: 0
 trx_tables_locked: 0
 Anzahl der Lockstrukturen: 2
 trx_lock_memory_bytes: 360
 trx_rows_locked: 9
 trx_rows_modified: 8
 trx_concurrency_tickets: 0
 trx_isolation_level: WIEDERHOLBARES LESEN
 trx_unique_checks: 1
 trx_foreign_key_checks: 1
 trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
 trx_adaptive_hash_timeout: 10000
 trx_ist_schreibgeschützt: 0
 trx_autocommit_non_locking: 0

Sehen Sie sich die Tabelle INNODB_LOCKS an, um zu sehen, welche Sperren vorhanden sind.

mysql> wähle * aus information_schema.INNODB_LOCKS\G
*************************** 1. Reihe ***************************
lock_id: 17778:82:3:6 – Aktuelle Sperr-ID
lock_trx_id: 17778 - Die dem Schloss entsprechende Transaktions-ID
lock_mode: X – Sperrtyp, exklusive Sperre X
lock_type: RECORD – Sperrbereich, Datensatzsperre: Datensatzsperre, andere Sperrbereiche: Lückensperre: Lückensperre oder Next-Key-Sperre (Datensatzsperre + Lückensperre)
lock_table: `test`.`trx_fee`
lock_index: PRIMARY – welcher Index ist die geladene Sperre auf lock_space: 82
Sperrseite: 3
lock_rec: 6
Sperrdaten: 4
*************************** 2. Reihe ***************************
Sperr-ID: 17773:82:3:6
lock_trx_id: 17773
Sperrmodus: X
Sperrtyp: AUFZEICHNUNG
lock_table: `test`.`trx_fee`
Sperrindex: PRIMÄR
Sperrraum: 82
Sperrseite: 3
lock_rec: 6
Sperrdaten: 4

Sehen Sie sich abschließend die Tabelle INNODB_LOCK_WAITS an, um zu sehen, welche Sperren derzeit warten.

mysql> wähle * aus information_schema.INNODB_LOCK_WAITS\G
*************************** 1. Reihe ***************************
requesting_trx_id: 17778 – Transaktions-ID, die die Sperre anfordert (Wartender)
requested_lock_id: 17778:82:3:6 – angeforderte Sperr-ID
blocking_trx_id: 17773 – Die Transaktions-ID, die die Sperre blockiert (aktueller Inhaber, wartet auf Freigabe)
blocking_lock_id: 17773:82:3:6 – ID der gehaltenen Sperre

Eine Beschreibung der Verwendung von Tabellen im Zusammenhang mit InnoDB in INFORMATION_SCHEMA finden Sie im Handbuch: 21.29 INFORMATION_SCHEMA-Tabellen für InnoDB

3. Verwenden Sie die Funktionen des Percona-Zweigs, um die aktuelle Transaktions-ID anzuzeigen. Diese Funktion wurde seit Version 5.6.11-60.3 eingeführt. Führen Sie die folgenden beiden Befehle aus, um sie anzuzeigen

mysqladmin ext | grep Innodb_max_trx_id
Oder mysql> globalen Status wie „Innodb_max_trx_id“ anzeigen;

Zum Schluss möchte ich noch die Ursache des Problems erläutern. Ein Freund hat das Problem mit mir besprochen und gesagt, dass er im Java-Verbindungspool festgestellt hat, dass die Transaktions-IDs zweier Transaktionen gleich waren. Der SQL-Code für den Test lautete:

beginnen; trx aktualisieren, un=rand() setzen, wobei id=round(rand()*10)+1; * aus information_schema.INNODB_TRX auswählen; committen; sleep(0,01) auswählen; beginnen; trx aktualisieren, un=rand() setzen, wobei id=round(rand()*10)+1; * aus information_schema.INNODB_TRX auswählen; committen;

Diese Codezeichenfolge kann nicht umbrochen werden, und die Ruhezeit in der Mitte darf nicht zu lang sein. Das heißt, wenn die Simulation schnell genug ist, prüfen Sie, ob sich die IDs der beiden Transaktionen geändert haben. Es kann festgestellt werden, dass bei ausreichend kurzer Zeit die zweimal abgefragten Transaktions-IDs gleich sind und sich nicht geändert haben. Sie können es auch in Ihrer eigenen Umgebung ausprobieren.

Oben finden Sie Einzelheiten zur Abfrage der aktuellen Transaktions-ID in MySQL. Weitere Informationen zur Abfrage der Transaktions-ID in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Wie implementiert MySQL ACID-Transaktionen?
  • Warum MySQL große Transaktionen vermeiden sollte und wie man sie löst
  • Analyse der neuen Funktionen von MySQL 8.0 - Transaktionales Datenwörterbuch und Atomic DDL
  • Detaillierte Erläuterung des Implementierungsprinzips von MySQL-Transaktionen und Spring-Isolationsebenen
  • Ausführliche Erläuterung der Konzepte und Verwendung von MySQL-Transaktionen
  • Beispiel zum Anzeigen und Ändern der MySQL-Transaktionsisolationsebene
  • Erweiterte Verwendung von Ansichten, Transaktionen, Indizes, Selbstverbindungen und Benutzerverwaltung in der MySQL-Datenbank – Beispielanalyse
  • Zusammenfassung der Wissenspunkte zu MySQL-Index, Sperre und Transaktion
  • MySql-Wissenspunkte: Transaktion, Index, Sperrprinzip und Nutzungsanalyse
  • So verwendet MySQL Transaktionen

<<:  Detaillierte Erklärung des gesamten Prozesses und der Schritte zur Installation von Clion auf Ubuntu16.04

>>:  Analyse der HTTP-Dienstschritte auf einer virtuellen VMware-Maschine

Artikel empfehlen

MySQL-Schleife fügt zig Millionen Daten ein

1. Erstellen Sie eine Testtabelle Tabelle `mysql_...

Einführung in die Verschachtelungsregeln von HTML-Tags

Es gibt viele XHTML-Tags: div, ul, li, dl, dt, dd...

CSS- und HTML- und Front-End-Technologie-Schichtendiagramm

Die Beziehung zwischen Javascript und DOM ist seh...

Detaillierte Erläuterung der kombinierten MySQL-Indexmethode

Für jedes DBMS sind die Indizes der wichtigste Op...

Einführung in die Installation des Vim-Plugins unter Linux

Inhaltsverzeichnis Installieren Sie den Vim-Plugi...

Daten in der Layui-Tabellenzeile dynamisch bearbeiten

Inhaltsverzeichnis Vorwort Stil Funktion Beschrei...

Windows Server 2019 installieren (grafisches Tutorial)

Windows Server 2019 ist das neueste Server-Betrie...

So ändern Sie den Standardspeicherort von Docker-Images (Lösung)

Aufgrund der anfänglichen Partitionierung des Sys...

Webdesign: Implementierungstechniken für Webmusik

<br />Wenn Sie Musik in eine Webseite einfüg...