SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST
zeigt Ihnen, welche
Threads gerade ausgeführt werden. Sie können diese
Information auch mit mysqladmin processlist
anzeigen. Wenn Sie die Berechtigung SUPER
haben, werden alle Threads angezeigt. Andernfalls werden nur
Ihre eigenen Threads (d. h. Threads, die mit dem
MySQL-Benutzerkonto verknüpft sind, das Sie verwenden)
angezeigt. Siehe auch Abschnitt 13.5.5.3, „KILL
“. Wenn Sie das
Schlüsselwort FULL
nicht angeben, werden
nur die ersten hundert Zeichen jeder Anweisung im Feld
Info
angezeigt.
Diese Anweisung ist recht praktisch, wenn Sie die
Fehlermeldung „Too many connections“ erhalten und
herausfinden wollen, was gerade passiert. MySQL reserviert
eine zusätzliche Verbindung für Konten, die die Berechtigung
SUPER
haben, damit gewährleistet ist, dass
Administratoren jederzeit Verbindungen herstellen können, um
das System zu überprüfen. (Dies setzt natürlich voraus,
dass Sie diese Berechtigung nicht allen Benutzern gewähren.)
Die Ausgabe von SHOW PROCESSLIST
kann etwa
so aussehen:
mysql> SHOW FULL PROCESSLIST\G *************************** 1. row *************************** Id: 1 User: system user Host: db: NULL Command: Connect Time: 1030455 State: Waiting for master to send event Info: NULL *************************** 2. row *************************** Id: 2 User: system user Host: db: NULL Command: Connect Time: 1004 State: Has read all relay log; waiting for the slave I/O thread to update it Info: NULL *************************** 3. row *************************** Id: 3112 User: replikator Host: artemis:2204 db: NULL Command: Binlog Dump Time: 2144 State: Has sent all binlog to slave; waiting for binlog to be updated Info: NULL *************************** 4. row *************************** Id: 3113 User: replikator Host: iconnect2:45781 db: NULL Command: Binlog Dump Time: 2086 State: Has sent all binlog to slave; waiting for binlog to be updated Info: NULL *************************** 5. row *************************** Id: 3123 User: stefan Host: localhost db: apollon Command: Query Time: 0 State: NULL Info: SHOW FULL PROCESSLIST 5 rows in set (0.00 sec)
Die Spalten haben die nachfolgend beschriebenen Bedeutungen:
Id
Der Verbindungsbezeichner.
User
Der MySQL-Benutzer, der die Anweisung abgesetzt hat. Die
Anzeige system user
bezeichnet einen
clientlosen Thread, den der Server erzeugt hat, um Tasks
intern zu verwalten. Es kann sich dabei um den I/O- oder
den SQL-Thread, der auf dem Replikationsserver verwendet
wird, oder einen Handler für verzögerte Datensätze
handeln. Für den system user
ist in
der Spalte Host
kein Host angegeben.
Host
Der Hostname des Clients, der die Anweisung absetzt
(außer bei system user
, wo kein Host
angegeben wird).
SHOW PROCESSLIST
meldet den Hostnamen
für TCP/IP-Verbindungen im Format
,
damit Sie schneller feststellen können, welcher Client
was tut.
host_name
:client_port
db
Die Standarddatenbank, sofern eine solche ausgewählt
wurde; andernfalls NULL
.
Command
Der Wert dieser Spalte entspricht den
COM_
-Befehlen
des Client/Server-Protokolls. Siehe auch
Abschnitt 5.2.4, „Server-Statusvariablen“.
xxx
Der Wert Command
kann einen der
folgenden Werte haben: Binlog Dump
,
Change user
, Close
stmt
, Connect
,
Connect Out
, Create
DB
, Debug
, Delayed
insert
, Drop DB
,
Error
, Execute
,
Fetch
, Field List
,
Init DB
, Kill
,
Long Data
, Ping
,
Prepare
,
Processlist
, Query
,
Quit
, Refresh
,
Register Slave
, Reset
stmt
, Set option
,
Shutdown
, Sleep
,
Statistics
, Table
Dump
, Time
Time
Die Zeit (in Sekunden), die seit dem Start der Anweisung oder des Befehls bis jetzt vergangen ist.
State
Eine Aktion, ein Ereignis oder ein Zustand. Folgende Werte
sind möglich: After create
,
Analyzing
, Changing
master
, Checking master
version
, Checking table
,
Connecting to master
, Copying
to group table
, Copying to tmp
table
, Creating delayed
handler
, Creating index
,
Creating sort index
, Creating
table from master dump
, Creating tmp
table
, Execution of
init_command
, FULLTEXT
initialization
, Finished reading one
binlog; switching to next binlog
,
Flushing tables
,
Killed
, Killing
slave
, Locked
,
Making temp file
, Opening
master dump table
, Opening
table
, Opening tables
,
Processing request
, Purging
old relay logs
, Queueing master event
to the relay log
, Reading event from
the relay log
, Reading from
net
, Reading master dump table
data
, Rebuilding the index on master
dump table
, Reconnecting after a failed
binlog dump request
, Reconnecting after
a failed master event read
, Registering
slave on master
, Removing
duplicates
, Reopen tables
,
Repair by sorting
, Repair
done
, Repair with keycache
,
Requesting binlog dump
,
Rolling back
, Saving
state
, Searching rows for
update
, Sending binlog event to
slave
, Sending data
,
Sorting for group
, Sorting for
order
, Sorting index
,
Sorting result
, System
lock
, Table lock
,
Thread initialized
,
Updating
, User lock
,
Waiting for INSERT
, Waiting
for master to send event
, Waiting for
master update
, Waiting for slave mutex
on exit
, Waiting for table
,
Waiting for tables
, Waiting
for the next event in relay log
,
Waiting on cond
, Waiting to
finalize termination
, Waiting to
reconnect after a failed binlog dump request
,
Waiting to reconnect after a failed master event
read
, Writing to net
,
allocating local table
,
cleaning up
, closing
tables
, converting HEAP to
MyISAM
, copy to tmp table
,
creating table
, deleting from
main table
, deleting from reference
tables
,
discard_or_import_tablespace
,
end
, freeing items
,
got handler lock
, got old
table
, info
,
init
, insert
,
logging slow query
,
login
, preparing
,
purging old relay logs
, query
end
, removing tmp table
,
rename
, rename result
table
, reschedule
,
setup
, starting
slave
, statistics
,
storing row into queue
,
update
, updating
,
updating main table
, updating
reference tables
, upgrading
lock
, waiting for delay_list
,
waiting for handler insert
,
waiting for handler lock
,
waiting for handler open
Die gängigsten State
-Werte werden im
Folgenden beschrieben. Die Mehrzahl der anderen
State
-Werte sind in erster Linie
praktisch, um Bugs im Server zu finden. Weitere
Informationen zu Prozesszuständen bei Replikationsservern
finden Sie in
Abschnitt 6.4, „Replikation: Implementationsdetails“.
Für die SHOW PROCESSLIST
-Anweisung ist
der State
-Wert NULL
.
Info
Die Anweisung, die der Thread ausführt, oder
NULL
, sofern er keine Anweisung
ausführt.
Einige State
-Werte finden Sie in der
Ausgabe von SHOW PROCESSLIST
recht häufig:
Checking table
Der Thread führt eine Tabellenprüfung durch.
Closing tables
Der Thread synchronisiert die geänderten Tabellendaten auf die Festplatte und schließt die verwendeten Tabellen. Dies sollte ein sehr schneller Vorgang sein. Andernfalls sollten Sie überprüfen, ob Ihre Festplatte nicht voll ist oder stark frequentiert wird.
Connect Out
Ein Replikationsslave stellt eine Verbindung zum Master her.
Copying to tmp table
Der Server kopiert Daten in eine Temporärtabelle im Speicher.
Copying to tmp table on disk
Der Server kopiert Daten in eine Temporärtabelle auf die
Festplatte. Die temporäre Ergebnismenge war größer als
tmp_table_size
, und der Thread stellt
die Temporärtabelle deswegen vom speicherresidenten in
das festplattenbasierte Format um, um Speicher zu sparen.
Creating tmp table
Der Thread erstellt eine Temporärtabelle, die einen Teil des Abfrageergebnisses aufnehmen soll.
deleting from main table
Der Server führt den ersten Teil eines Löschvorgangs über mehrere Tabellen aus. Der Löschvorgang erfolgt nur in der ersten Tabelle und speichert Felder und Offsets, die zum Löschen aus anderen (Referenz-)Tabellen benutzt werden.
deleting from reference tables
Der Server führt den zweiten Teil eines Löschvorgangs über mehrere Tabellen aus und löscht die entsprechenden Datensätze aus anderen Tabellen.
Flushing tables
Der Thread führt FLUSH TABLES
aus und
wartet, bis alle Threads ihre Tabellen geschlossen haben.
FULLTEXT initialization
Der Server bereitet die Ausführung einer natursprachlichen Volltextsuche vor.
Killed
Jemand hat eine KILL
-Anweisung an den
Thread abgesetzt. Der Thread wird abgebrochen, wenn beim
nächsten Mal das Terminierungs-Flag gesetzt wird. Dieses
Flag wird in jeder größeren Schleife in MySQL gesetzt.
Trotzdem kann es unter Umständen einen Moment dauern, bis
der Thread terminiert ist. Ist der Thread durch einen
anderen Thread gesperrt, dann erfolgt die Terminierung
erst, wenn der andere Thread die Sperre aufgehoben hat.
Locked
Die Abfrage wird durch eine andere Abfrage gesperrt.
Sending data
Der Thread verarbeitet Datensätze für eine
SELECT
-Anweisung und sendet zudem Daten
an den Client.
Sorting for group
Der Thread führt eine Sortierung infolge einer
GROUP BY
-Klausel durch.
Sorting for order
Der Thread führt eine Sortierung infolge einer
ORDER BY
-Klausel durch.
Opening tables
Der Thread versucht, eine Tabelle zu öffnen. Dies sollte
ein sehr schneller Vorgang sein, sofern das Öffnen nicht
durch irgendeinen Umstand verhindert wird. So kann
beispielsweise eine ALTER TABLE
- oder
eine LOCK TABLE
-Anweisung das Öffnen
einer Tabelle bis zum Abschluss der Anweisung unterbinden.
Reading from net
Der Server liest ein Paket aus dem Netzwerk.
Removing duplicates
Die Abfrage verwendete SELECT DISTINCT
so, dass MySQL die DISTINCT
-Operation
nicht zu einem frühen Zeitpunkt wegoptimieren konnte. Aus
diesem Grund erfordert MySQL eine zusätzliche Phase, um
alle duplizierten Datensätze zu entfernen, bevor das
Ergebnis an den Client gesendet wird.
Reopen table
Der Thread hat eine Sperre für die Tabelle erwirkt, danach aber festgestellt, dass die zugrunde liegende Tabellenstruktur sich geändert hat. Der Thread hat die Sperre dann aufgehoben und die Tabelle geschlossen und versucht nun, sie wieder zu öffnen.
Repair by sorting
Der Reparaturcode verwendet einen Sortiervorgang zur Erstellung der Indizes.
Repair with keycache
Der Reparaturcode erstellt einen Schlüssel nach dem
anderen über den Schlüssel-Cache. Dies ist wesentlich
langsamer als Repair by sorting
.
Searching rows for update
Der Thread durchläuft die erste Phase zur Suche nach
passenden Datensätzen, bevor er sie aktualisiert. Dies
muss getan werden, wenn UPDATE
den
Index ändert, der für die Suche nach den betreffenden
Datensätzen verwendet wird.
Sleeping
Der Thread wartet darauf, dass der Client eine neue Anweisung an ihn sendet.
statistics
Der Server berechnet Statistiken zur Entwicklung eines Abfrageausführungsplans.
Der Thread wartet darauf, eine externe Systemsperre für
die Tabelle zu erhalten. Wenn Sie nicht mehrere
mysqld-Server verwenden, die auf die
gleichen Tabellen zugreifen, können Sie Systemsperren mit
der Option --skip-external-locking
deaktivieren.
Upgrading lock
Der Handler INSERT DELAYED
versucht,
eine Sperre für die Tabelle zu erwirken, um Datensätze
einzufügen.
Updating
Der Thread sucht nach zu aktualisierenden Datensätzen und aktualisiert diese dann.
updating main table
Der Server führt den ersten Teil eines Änderungsvorgangs über mehrere Tabellen aus. Er führt Änderungen nur in der ersten Tabelle aus und speichert Felder und Offsets, die zur Aktualisierung anderer (Referenz-)Tabellen benutzt werden.
updating reference tables
Der Server führt den zweiten Teil eines Änderungsvorgangs über mehrere Tabellen aus und aktualisiert die entsprechenden Datensätze in den anderen Tabellen.
User Lock
Der Thread wartet auf ein GET_LOCK()
.
Waiting for tables
Der Thread hat eine Mitteilung erhalten, dass die einer Tabelle zugrunde liegende Struktur sich geändert hat und er die Tabelle neu öffnen muss, um die neue Struktur zu erhalten. Um die Tabelle allerdings neu öffnen zu können, muss er warten, bis alle anderen Threads die fragliche Tabelle geschlossen haben.
Diese Benachrichtigung erfolgt, wenn ein anderer Thread
FLUSH TABLES
oder eine der folgenden
Anweisungen für die betreffende Tabelle verwendet hat:
FLUSH TABLES
,
tbl_name
ALTER TABLE
, RENAME
TABLE
, REPAIR TABLE
,
ANALYZE TABLE
oder OPTIMIZE
TABLE
.
waiting for handler insert
Der INSERT DELAYED
-Handler hat alle
anhängigen Einfügeoperationen verarbeitet und wartet auf
neue.
Writing to net
Der Server schreibt ein Paket in das Netzwerk.
Die meisten Zustände entsprechen sehr schnellen Operationen. Wenn ein Thread für mehrere Sekunden in einem dieser Zustände verbleibt, dann weist dies auf ein Problem hin, das untersucht werden muss.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.