Rechercher dans le manuel MySQL
26.12.18.5 The threads Table
The threads
table contains a row
for each server thread. Each row contains information about a
thread and indicates whether monitoring and historical event
logging are enabled for it:
- *************************** 1. row ***************************
- THREAD_ID: 1
- NAME: thread/sql/main
- TYPE: BACKGROUND
- PROCESSLIST_ID: NULL
- PROCESSLIST_USER: NULL
- PROCESSLIST_HOST: NULL
- PROCESSLIST_DB: NULL
- PROCESSLIST_COMMAND: NULL
- PROCESSLIST_TIME: 80284
- PROCESSLIST_STATE: NULL
- PROCESSLIST_INFO: NULL
- PARENT_THREAD_ID: NULL
- ROLE: NULL
- INSTRUMENTED: YES
- HISTORY: YES
- CONNECTION_TYPE: NULL
- THREAD_OS_ID: 489803
- RESOURCE_GROUP: SYS_default
- ...
- *************************** 4. row ***************************
- THREAD_ID: 51
- NAME: thread/sql/one_connection
- TYPE: FOREGROUND
- PROCESSLIST_ID: 34
- PROCESSLIST_USER: isabella
- PROCESSLIST_HOST: localhost
- PROCESSLIST_DB: performance_schema
- PROCESSLIST_COMMAND: Query
- PROCESSLIST_TIME: 0
- PROCESSLIST_STATE: Sending data
- PARENT_THREAD_ID: 1
- ROLE: NULL
- INSTRUMENTED: YES
- HISTORY: YES
- CONNECTION_TYPE: SSL/TLS
- THREAD_OS_ID: 755399
- RESOURCE_GROUP: USR_default
- ...
When the Performance Schema initializes, it populates the
threads
table based on the
threads in existence then. Thereafter, a new row is added each
time the server creates a thread.
The INSTRUMENTED
and
HISTORY
column values for new threads are
determined by the contents of the
setup_actors
table. For
information about how to use the
setup_actors
table to control
these columns, see
Section 26.4.6, “Pre-Filtering by Thread”.
Removal of rows from the threads
table occurs when threads end. For a thread associated with a
client session, removal occurs when the session ends. If a
client has auto-reconnect enabled and the session reconnects
after a disconnect, the session becomes associated with a new
row in the threads
table that has
a different PROCESSLIST_ID
value. The
initial INSTRUMENTED
and
HISTORY
values for the new thread may be
different from those of the original thread: The
setup_actors
table may have
changed in the meantime, and if the
INSTRUMENTED
or HISTORY
value for the original thread was changed after the row was
initialized, the change does not carry over to the new thread.
The threads
table columns with
names having a prefix of PROCESSLIST_
provide information similar to that available from the
INFORMATION_SCHEMA.PROCESSLIST
table or the SHOW PROCESSLIST
statement. Thus, all three sources provide thread-monitoring
information. Use of threads
differs from use of the other two sources in these ways:
Access to
threads
does not require a mutex and has minimal impact on server performance.INFORMATION_SCHEMA.PROCESSLIST
andSHOW PROCESSLIST
have negative performance consequences because they require a mutex.threads
provides additional information for each thread, such as whether it is a foreground or background thread, and the location within the server associated with the thread.threads
provides information about background threads, so it can be used to monitor activity the other thread information sources cannot.You can enable or disable thread monitoring (that is, whether events executed by the thread are instrumented) and historical event logging. To control the initial
INSTRUMENTED
andHISTORY
values for new foreground threads, use thesetup_actors
table. To control these aspects of existing threads, set theINSTRUMENTED
andHISTORY
columns ofthreads
table rows. (For more information about the conditions under which thread monitoring and historical event logging occur, see the descriptions of theINSTRUMENTED
andHISTORY
columns.)
For these reasons, DBAs who perform server monitoring using
INFORMATION_SCHEMA.PROCESSLIST
or
SHOW PROCESSLIST
may wish to
monitor using the threads
table
instead.
For
INFORMATION_SCHEMA.PROCESSLIST
and SHOW PROCESSLIST
,
information about threads for other users is shown only if
the current user has the
PROCESS
privilege. That is
not true of the threads
table;
all rows are shown to any user who has the
SELECT
privilege for the table. Users who
should not be able to see threads for other users should not
be given that privilege.
The threads
table has these
columns:
THREAD_ID
A unique thread identifier.
NAME
The name associated with the thread instrumentation code in the server. For example,
thread/sql/one_connection
corresponds to the thread function in the code responsible for handling a user connection, andthread/sql/main
stands for themain()
function of the server.TYPE
The thread type, either
FOREGROUND
orBACKGROUND
. User connection threads are foreground threads. Threads associated with internal server activity are background threads. Examples are internalInnoDB
threads, “binlog dump” threads sending information to slaves, and slave I/O and SQL threads.PROCESSLIST_ID
For threads that are displayed in the
INFORMATION_SCHEMA.PROCESSLIST
table, this is the same value displayed in theID
column of that table. It is also the value displayed in theId
column ofSHOW PROCESSLIST
output, and the value thatCONNECTION_ID()
would return within that thread.For background threads (threads not associated with a user connection),
PROCESSLIST_ID
isNULL
, so the values are not unique.PROCESSLIST_USER
The user associated with a foreground thread,
NULL
for a background thread.PROCESSLIST_HOST
The host name of the client associated with a foreground thread,
NULL
for a background thread.Unlike the
HOST
column of theINFORMATION_SCHEMA
PROCESSLIST
table or theHost
column ofSHOW PROCESSLIST
output, thePROCESSLIST_HOST
column does not include the port number for TCP/IP connections. To obtain this information from the Performance Schema, enable the socket instrumentation (which is not enabled by default) and examine thesocket_instances
table:- FROM performance_schema.setup_instruments
- +----------------------------------------+---------+-------+
- | NAME | ENABLED | TIMED |
- +----------------------------------------+---------+-------+
- +----------------------------------------+---------+-------+
- mysql> UPDATE performance_schema.setup_instruments
- Query OK, 3 rows affected (0.00 sec)
- *************************** 1. row ***************************
- EVENT_NAME: wait/io/socket/sql/client_connection
- OBJECT_INSTANCE_BEGIN: 140612577298432
- THREAD_ID: 31
- SOCKET_ID: 53
- IP: ::ffff:127.0.0.1
- PORT: 55642
- STATE: ACTIVE
- ...
PROCESSLIST_DB
The default database for the thread, or
NULL
if there is none.PROCESSLIST_COMMAND
For foreground threads, the type of command the thread is executing on behalf of the client, or
Sleep
if the session is idle. For descriptions of thread commands, see Section 8.14, “Examining Thread Information”. The value of this column corresponds to theCOM_
commands of the client/server protocol andxxx
Com_
status variables. See Section 5.1.10, “Server Status Variables”xxx
Background threads do not execute commands on behalf of clients, so this column may be
NULL
.PROCESSLIST_TIME
The time in seconds that the thread has been in its current state.
PROCESSLIST_STATE
An action, event, or state that indicates what the thread is doing. For descriptions of
PROCESSLIST_STATE
values, see Section 8.14, “Examining Thread Information”. If the value ifNULL
, the thread may correspond to an idle client session or the work it is doing is not instrumented with stages.Most states correspond to very quick operations. If a thread stays in a given state for many seconds, there might be a problem that bears investigation.
PROCESSLIST_INFO
The statement the thread is executing, or
NULL
if it is not executing any statement. The statement might be the one sent to the server, or an innermost statement if the statement executes other statements. For example, if aCALL
statement executes a stored procedure that is executing aSELECT
statement, thePROCESSLIST_INFO
value shows theSELECT
statement.PARENT_THREAD_ID
If this thread is a subthread (spawned by another thread), this is the
THREAD_ID
value of the spawning thread.ROLE
Unused.
INSTRUMENTED
Whether events executed by the thread are instrumented. The value is
YES
orNO
.For foreground threads, the initial
INSTRUMENTED
value is determined by whether the user account associated with the thread matches any row in thesetup_actors
table. Matching is based on the values of thePROCESSLIST_USER
andPROCESSLIST_HOST
columns.If the thread spawns a subthread, matching occurs again for the
threads
table row created for the subthread.For background threads,
INSTRUMENTED
isYES
by default.setup_actors
is not consulted because there is no associated user for background threads.For any thread, its
INSTRUMENTED
value can be changed during the lifetime of the thread.
For monitoring of events executed by the thread to occur, these things must be true:
The
thread_instrumentation
consumer in thesetup_consumers
table must beYES
.The
threads.INSTRUMENTED
column must beYES
.Monitoring occurs only for those thread events produced from instruments that have the
ENABLED
column set toYES
in thesetup_instruments
table.
HISTORY
Whether to log historical events for the thread. The value is
YES
orNO
.For foreground threads, the initial
HISTORY
value is determined by whether the user account associated with the thread matches any row in thesetup_actors
table. Matching is based on the values of thePROCESSLIST_USER
andPROCESSLIST_HOST
columns.If the thread spawns a subthread, matching occurs again for the
threads
table row created for the subthread.For background threads,
HISTORY
isYES
by default.setup_actors
is not consulted because there is no associated user for background threads.For any thread, its
HISTORY
value can be changed during the lifetime of the thread.
For historical event logging for the thread to occur, these things must be true:
The appropriate history-related consumers in the
setup_consumers
table must be enabled. For example, wait event logging in theevents_waits_history
andevents_waits_history_long
tables requires the correspondingevents_waits_history
andevents_waits_history_long
consumers to beYES
.The
threads.HISTORY
column must beYES
.Logging occurs only for those thread events produced from instruments that have the
ENABLED
column set toYES
in thesetup_instruments
table.
CONNECTION_TYPE
The protocol used to establish the connection, or
NULL
for background threads. Permitted values areTCP/IP
(TCP/IP connection established without encryption),SSL/TLS
(TCP/IP connection established with encryption),Socket
(Unix socket file connection),Named Pipe
(Windows named pipe connection), andShared Memory
(Windows shared memory connection).THREAD_OS_ID
The thread or task identifier as defined by the underlying operating system, if there is one:
When a MySQL thread is associated with the same operating system thread for its lifetime,
THREAD_OS_ID
contains the operating system thread ID.When a MySQL thread is not associated with the same operating system thread for its lifetime,
THREAD_OS_ID
containsNULL
. This is typical for user sessions when the thread pool plugin is used (see Section 5.6.3, “MySQL Enterprise Thread Pool”).
For Windows,
THREAD_OS_ID
corresponds to the thread ID visible in Process Explorer (https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx).For Linux,
THREAD_OS_ID
corresponds to the value of thegettid()
function. This value is exposed, for example, using the perf or ps -L commands, or in theproc
file system (/proc/
). For more information, see the[pid]
/task/[tid]
perf-stat(1)
,ps(1)
, andproc(5)
man pages.RESOURCE_GROUP
The resource group label. This value is
NULL
if resource groups are not supported on the current platform or server configuration (see Resource Group Restrictions).
The threads
table has these
indexes:
Primary key on (
THREAD_ID
)Index on (
NAME
)Index on (
PROCESSLIST_ID
)Index on (
PROCESSLIST_USER
,PROCESSLIST_HOST
)Index on (
PROCESSLIST_HOST
)Index on (
THREAD_OS_ID
)Index on (
RESOURCE_GROUP
)
TRUNCATE TABLE
is not permitted
for the threads
table.
Document created the 26/06/2006, last modified the 26/10/2018
Source of the printed document:https://www.gaudry.be/en/mysql-rf-threads-table.html
The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.
References
These references and links indicate documents consulted during the writing of this page, or which may provide additional information, but the authors of these sources can not be held responsible for the content of this page.
The author This site is solely responsible for the way in which the various concepts, and the freedoms that are taken with the reference works, are presented here. Remember that you must cross multiple source information to reduce the risk of errors.