MySQL-Ansicht, die SQL ausführt

MySQL-Ansicht zum Ausführen von SQL
Vorwort
Bei der Installation von MySQL werden standardmäßig mehrere für den MySQL-Betrieb erforderliche Datenbanken initialisiert: mysql, sys, information_schema, performance_schema. Diese Bibliotheken speichern die Konfigurationsinformationen und Betriebsinformationen von MySQL während des Betriebs, Parameterkonfiguration, Datenbankinformationen und Tabellen Informationen usw. Heutzutage sind die beiden Bibliotheken, die hauptsächlich zum Anzeigen des laufenden SQL verwendet werden, information_schema und performance_schema.

Prozessliste
Die Prozesslistentabelle befindet sich in der Bibliothek information_schema und speichert hauptsächlich einige grundlegende Informationen zu MySQL-Threads. Wir gebrauchen

desc information_schema.processlist, um die Tabellenstruktur anzuzeigen:

ID: Die ID des Threads.
BENUTZER: Zu welchem ​​Benutzer der Thread gehört.
HOST: Die Hostinformationen des Clients: Hostname+Port.
DB: Unter welcher Datenbank sich der Thread befindet.
BEFEHL: Welchen Befehl der Thread ausführt, und der Thread-Leerlaufstatus Sleep
TIME: Der Thread läuft bereits in Sekunden.
STATE: Was der Thread tut: Der aktuelle Status, das aktuelle Verhalten oder das aktuelle Ereignis
INFO: Die Anweisung, die der Thread ausführt, aber diese ist nicht sehr genau, daher müssen wir other verwenden Wege, um unser Ziel zu erreichen.

Verwenden Sie show Processlist oder wählen Sie * aus information_schema.processlist aus, um die Prozesslistentabelle anzuzeigen

Threads
Threads befinden sich in der performance_schema-Bibliothek und jede Zeile zeichnet einen Server-Thread auf. Wenn performance_schema initialisiert wird, wird die Thread-Tabelle entsprechend den zu diesem Zeitpunkt vorhandenen Threads aufgefüllt. Jedes Mal, wenn der Server einen Thread erstellt, wird ein neues Datenelement hinzugefügt. Wenn der Thread endet, werden diese Daten auch aus der Thread-Tabelle gelöscht. Verwenden Sie desc performance_schema.threads, um die Tabellenstruktur anzuzeigen:

THREAD_ID: Eindeutige Thread-ID.
NAME: Name, der dem Thread-Überwachungscode im Server zugeordnet ist.
TYPE: Thread-Typ. Unterteilt in Vordergrund und Hintergrund. Mit dem Benutzer verbundene Threads sind Vordergrund-Threads und Threads, die sich auf interne Serveraktivitäten beziehen, sind Backend-Threads. Zum Beispiel interne InnoDB-Threads.
PROCESSLIST_ID: ID der oberen Prozessliste
PROCESSLIST_USER: Benutzer der oberen Prozessliste
PROCESSLIST_HOST: Host der oberen Prozessliste
PROCESSLIST_DB: DB der oberen Prozessliste
PROCESSLIST_COMMAND:
BEFEHL der oberen Prozessliste PROCESSLIST_TIME: ZEIT PROCESSLIST der oberen Prozessliste _STATE: STATE PROCESSLIST_INFO
der Prozessliste oben
: INFO PARENT_THREAD_ID der Prozessliste oben
: der ID-Wert des abgeleiteten Threads.
ROLLE: nicht verwendet.
INSTRUMENTIERT: ob das vom Thread ausgeführte Ereignis instrumentiert ist (JA oder EIN).
HISTORY: ob historische Ereignisse für den Thread aufgezeichnet werden sollen.
CONNECTION_TYPE: der Protokoll, das zum Herstellen der Verbindung verwendet wird, oder NULL für Hintergrundthreads.
THREAD_OS_ID: Der MySQL-Thread entspricht der Thread-ID des Betriebssystems

events_statements_current
events_statements_current befindet sich in der performance_schema-Bibliothek, die die aktuellen Anweisungsereignisse speichert, und die Tabelle speichert eine Zeile für jeden Thread, die den aktuellen Status der Anweisungsereignisse anzeigt, die Bruder Xianchen kürzlich überwacht hat. Verwenden Sie desc performance_schema.events_statements_current, um die Tabellenstruktur anzuzeigen:

THREAD_ID: Die dem Ereignis zugeordnete Thread-ID, die der ID der oben genannten Threads entspricht.
EVENT_ID: Die aktuelle Ereignisnummer des Threads, wenn das Ereignis beginnt

THREAD_ID und EVENT_ID markieren zusammen eine eindeutige Zeile, keine zwei Zeilen haben das gleiche Schlüssel-Wert-Paar

END_EVENT_ID: Setzen Sie zu Beginn des Ereignisses Null und aktualisieren Sie es am Ende des Ereignisses auf die aktuelle Ereignisnummer des Threads. EVENT_NAME: Der Name des Ereignisses.
QUELLE
: Der Name der Quelldatei, die den Überwachungscode enthält, der das Ereignis generiert die Zeilennummer der Datei, in der die Überwachung erfolgt.
TIMER_START, TIMER_END, TIMER_WAIT: Informationen zur Ereigniszeit, Startzeit, Endzeit, Ereignislaufzeit, Einheit ist Pikosekunde (Zehntausendstel Sekunde).
LOCK_TIME: Die Zeit, die für das Warten auf Tabellensperren aufgewendet wird. In Mikrosekunden
SQL_TEXT: Der Text der SQL-Anweisung oder null für Befehle ohne zugehörige SQL-Anweisung
DIGEST: 32 Zeichen für MD5
DIGEST_TEXT: Normalisierter Anweisungs-Digest-Text.
CURRENT_SCHEMA: Die Standarddatenbank für die Anweisung.
OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME: Bei verschachtelten Anweisungen enthalten diese Spalten Informationen über die übergeordnete Anweisung.
OBJECT_INSTANCE_BEGIN: Die Objektadresse der Anweisung im Speicher.
MYSQL_ERRNO: Die
Fehlernummer der Anweisung. Ob ein Fehler aufgetreten ist
. WARNINGS: Anzahl der Warnungen ROWS_AFFECTED: Anzahl der von der Anweisung betroffenen Zeilen ROWS_SENT: Anzahl der von der Anweisung zurückgegebenen Zeilen ROWS_EXAMINED: Anzahl der von der Serverschicht untersuchten Zeilen CREATED_TMP_DISK_TABLES






Erstellte_tmp_table
select_full_join
select_full_range_join select_range select_range_check select_scan sort_merge_passses sort_range sort_rows
sort_scan no_index_used no_good_index_used nesting_event_id_event_event_type_type _ _










So zeigen Sie das laufende SQL an
1. Die Processlist-Tabelle zeichnet die Thread-Informationen auf, die MySQL ausführt, und jeder Thread hat eine eindeutige ID eines nützlichen Threads in der Threads-Tabelle >>> thread_id. Die Tabelle „events_statements_current“ zeichnet die eindeutige Thread-ID und die dem Thread entsprechende SQL-Anweisung sql_text auf.

2. Daher können wir zunächst die der Prozessliste entsprechende ID in der Prozessliste abrufen

3. Durch die Feldanalyse der Thread-Tabelle haben wir eine Eins-zu-Eins-Entsprechung zwischen Prozesslisten_ID und Thread_ID, sodass wir Thread_ID über Prozesslisten_ID in der Threads-Tabelle erhalten können

4. Der letzte Schritt ist der Schlüssel. Wir erhalten sql_text in der Tabelle events_statements_current über thread_id, die SQL-Anweisung, die wir abrufen müssen.

Rufen Sie die Prozesslisten-ID ab, die ausgeführt wird, und
wählen Sie die ID aus information_schema.processlist aus

Rufen Sie die Thread_ID ab, die der Prozesslisten_ID entspricht.
Wählen Sie die Thread_ID aus performance_schema.threads aus, wobei sich die Prozesslisten_ID darin befindet (die im vorherigen Schritt erhaltene Liste der Prozesslisten_IDs).

Rufen Sie die ausführende SQL-Anweisung ab
und wählen Sie thread_id und sql_text aus performance_schema.events_statements_current aus, wobei thread_id in (thread_id-Liste aus dem vorherigen Schritt) ist.

SQL
SELECT a.*, c.thread_id, c.sql_text from information_schema.processlist a
LEFT JOIN performance_schema.threads b on a.id = b.PROCESSLIST_ID
LEFT JOIN performance_schema.events_statements_current c on c.THREAD_ID = b.THREAD_ID;

 

おすすめ

転載: blog.csdn.net/eagle89/article/details/129686151