25.12.16.4 Таблица threads
Таблица threads содержит строку для каждого серверного потока. Каждая строка содержит информацию о потоке и указывает, включены ли для него мониторинг и регистрация исторических событий:
mysql> SELECT * FROM performance_schema.threads\G
*************************** 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
...
*************************** 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
PROCESSLIST_INFO: SELECT * FROM performance_schema.threads
PARENT_THREAD_ID: 1
ROLE: NULL
INSTRUMENTED: YES
HISTORY: YES
CONNECTION_TYPE: SSL/TLS
THREAD_OS_ID: 755399
...
При инициализации Performance Schema таблица threads заполняется на основе потоков, существовавших в этот момент. Впоследствии при создании сервером нового потока добавляется новая строка.
Значения столбцов INSTRUMENTED и HISTORY для новых потоков определяются содержимым таблицы setup_actors. Подробнее о том, как использовать таблицу setup_actors для управления этими столбцами, см. Раздел 25.4.6 «Предварительный фильтр по потоку».
Удаление строк из таблицы threads происходит при завершении потоков. Для потока, связанного с сеансом клиента, удаление происходит при завершении сеанса. Если у клиента включена автоматическая повторная установка соединения, и сеанс подключается повторно после разъединения, сеанс связывается с новой строкой в таблице threads, которая имеет другое значение PROCESSLIST_ID. Изначальные значения INSTRUMENTED и HISTORY для нового потока могут отличаться от значений исходного потока: в это время таблица setup_actors может быть изменена, и если значение INSTRUMENTED или HISTORY для исходного потока было изменено после инициализации строки, это изменение не переносится на новый поток.
Вы можете включить или выключить мониторинг потоков (т.е. инструментацию событий, выполняемых потоком) и регистрацию исторических событий. Для управления начальными значениями INSTRUMENTED и HISTORY для новых потоков в фоновом режиме используйте таблицу setup_actors. Для управления этими аспектами существующих потоков установите столбцы INSTRUMENTED и HISTORY строк таблицы threads. (Дополнительную информацию о условиях, при которых происходит мониторинг потоков и регистрация исторических событий, см. в описаниях столбцов INSTRUMENTED и HISTORY.)
Сравнение столбцов таблицы threads с именами, начинающимися с префикса PROCESSLIST_, с другими источниками информации о процессах см. в Разделе «Источники информации о процессах».
Для источников информации о потоках, отличных от таблицы threads, информация о потоках других пользователей отображается только в том случае, если текущий пользователь имеет привилегию PROCESS. Это не относится к таблице threads; все строки отображаются любому пользователю, имеющему привилегию SELECT для этой таблицы. Пользователи, которые не должны видеть потоки других пользователей, обращаясь к таблице threads, не должны получать привилегию SELECT для нее.
Таблица threads содержит следующие столбцы:
-
THREAD_IDУникальный идентификатор потока.
-
NAMEИмя, связанное с кодом инструментирования потока на сервере. Например,
thread/sql/one_connectionсоответствует функции потока в коде, отвечающем за обработку подключения пользователя, аthread/sql/mainобозначает функциюmain()сервера. -
TYPEТип потока, либо
FOREGROUND, либоBACKGROUND. Потоки подключений пользователей являются потоками переднего плана. Потоки, связанные с внутренней деятельностью сервера, являются фоновыми потоками. Примерами являются внутренние потокиInnoDB, потоки “binlog dump”, отправляющие информацию репликам, а также потоки ввода-вывода репликации и SQL-потоки. -
PROCESSLIST_IDДля потока переднего плана (связанного с подключением пользователя) это идентификатор подключения. Это то же значение, отображаемое в столбце
IDтаблицыINFORMATION_SCHEMAPROCESSLIST, отображаемое в столбцеIdвыводаSHOW PROCESSLISTи возвращаемое функциейCONNECTION_ID()внутри потока.Для фонового потока (не связанного с подключением пользователя)
PROCESSLIST_IDравноNULL, поэтому значения не уникальны. -
PROCESSLIST_USERПользователь, связанный с потоком переднего плана,
NULLдля фонового потока. -
PROCESSLIST_HOSTИмя хоста клиента, связанного с потоком переднего плана,
NULLдля фонового потока.В отличие от столбца
HOSTтаблицыINFORMATION_SCHEMAPROCESSLISTили столбцаHostвыводаSHOW PROCESSLIST, столбецPROCESSLIST_HOSTне включает номер порта для TCP/IP-соединений. Чтобы получить эту информацию из Performance Schema, включите инструментирование сокетов (по умолчанию оно отключено) и просмотрите таблицуsocket_instances:mysql>
SELECT * FROM performance_schema.setup_instrumentsWHERE NAME LIKE 'wait/io/socket%';+----------------------------------------+---------+-------+ | NAME | ENABLED | TIMED | +----------------------------------------+---------+-------+ | wait/io/socket/sql/server_tcpip_socket | NO | NO | | wait/io/socket/sql/server_unix_socket | NO | NO | | wait/io/socket/sql/client_connection | NO | NO | +----------------------------------------+---------+-------+ 3 rows in set (0.01 sec) mysql>UPDATE performance_schema.setup_instrumentsSET ENABLED='YES'WHERE NAME LIKE 'wait/io/socket%';Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql>SELECT * FROM performance_schema.socket_instances\G*************************** 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База данных по умолчанию для потока или
NULL, если она не выбрана. -
PROCESSLIST_COMMANDДля потоков переднего плана — тип команды, выполняемой потоком от имени клиента, или
Sleep, если сеанс простаивает. Описание команд потоков см. в разделе 8.14, «Просмотр информации о потоках сервера (процессе)». Значение этого столбца соответствует командамCOM_протокола клиент/сервер и переменным состоянияxxxCom_. См. раздел 5.1.9, «Переменные состояния сервера»xxxФоновые потоки не выполняют команды от имени клиентов, поэтому этот столбец может быть
NULL. -
PROCESSLIST_TIMEВремя в секундах, которое поток находится в текущем состоянии. Для потока репликации SQL значение — количество секунд между отметкой времени последнего реплицированного события и реальным временем хоста реплики. См. раздел 16.2.3, «Потоки репликации».
-
PROCESSLIST_STATEДействие, событие или состояние, указывающее, что делает поток. Описание значений
PROCESSLIST_STATEсм. в разделе 8.14, «Просмотр информации о потоках сервера (процессе)». Если значение равноNULL, поток может соответствовать неактивному сеансу клиента, или работа, которую он выполняет, не инструментирована этапами.Большинство состояний соответствуют очень быстрым операциям. Если поток остается в определенном состоянии много секунд, это может указывать на проблему, требующую анализа.
-
PROCESSLIST_INFOВыполняемое утверждение потока или
NULL, если не выполняется никакого утверждения. Утверждение может быть тем, что было отправлено на сервер, или внутренним утверждением, если утверждение выполняет другие утверждения. Например, если утверждениеCALLвыполняет хранимую процедуру, которая выполняет утверждениеSELECT, значениеPROCESSLIST_INFOпоказывает утверждениеSELECT. -
PARENT_THREAD_IDЕсли этот поток является дочерним потоком (созданным другим потоком), это значение
THREAD_IDродительского потока. -
ROLEНе используется.
-
INSTRUMENTEDИнструментированы ли события, выполняемые потоком. Значение равно
YESилиNO.-
Для потоков переднего плана начальное значение
INSTRUMENTEDопределяется тем, соответствует ли учетная запись пользователя, связанная с потоком, какой-либо строке в таблицеsetup_actors. Сопоставление основано на значениях столбцовPROCESSLIST_USERиPROCESSLIST_HOST.Если поток порождает дочерний поток, проверка соответствия повторяется для строки таблицы
threads, созданной для дочернего потока. Для фоновых потоков
INSTRUMENTEDпо умолчанию равноYES.setup_actorsне используется, так как для фоновых потоков нет связанного пользователя.Для любого потока его значение
INSTRUMENTEDможет быть изменено в течение его жизненного цикла.
Для того, чтобы происходило отслеживание событий, выполняемых потоком, должны быть выполнены следующие условия:
Потребитель
thread_instrumentationв таблицеsetup_consumersдолжен бытьYES.Столбец
threads.INSTRUMENTEDдолжен бытьYES.Отслеживание происходит только для тех событий потока, которые создаются инструментами, у которых столбец
ENABLEDустановлен наYESв таблицеsetup_instruments.
-
-
HISTORYВести ли протокол исторических событий для потока. Значение равно
YESилиNO.-
Для потоков переднего плана начальное значение
HISTORYопределяется тем, соответствует ли учетная запись пользователя, связанная с потоком, какой-либо строке в таблицеsetup_actors. Сопоставление основано на значениях столбцовPROCESSLIST_USERиPROCESSLIST_HOST.Если поток порождает дочерний поток, проверка соответствия повторяется для строки таблицы
threads, созданной для дочернего потока. Для фоновых потоков
HISTORYпо умолчанию равноYES.setup_actorsне используется, так как для фоновых потоков нет связанного пользователя.Для любого потока его значение
HISTORYможет быть изменено в течение его жизненного цикла.
Для того, чтобы происходил протокол исторических событий потока, должны быть выполнены следующие условия:
Соответствующие потребители, связанные с историей, в таблице
setup_consumersдолжны быть включены. Например, ведение журнала событий ожидания в таблицахevents_waits_historyиevents_waits_history_longтребует включения соответствующих потребителейevents_waits_historyиevents_waits_history_long.Столбец
threads.HISTORYдолжен бытьYES.Ведение журнала происходит только для событий потока, произведенных инструментами, у которых столбец
ENABLEDустановлен наYESв таблицеsetup_instruments.
-
-
CONNECTION_TYPEПротокол, используемый для установления соединения, или
NULLдля фоновых потоков. Разрешённые значения —TCP/IP(TCP/IP-соединение установлено без шифрования),SSL/TLS(TCP/IP-соединение установлено с шифрованием),Socket(соединение через Unix-сокет),Named Pipe(соединение через именованную Windows-трубу) иShared Memory(соединение через общую память Windows).
-
THREAD_OS_IDИдентификатор потока или задачи, определенный базовой операционной системой, если таковой имеется:
Когда поток MySQL связан с одним и тем же потоком операционной системы на протяжении всего своего существования,
THREAD_OS_IDсодержит идентификатор потока операционной системы.Когда поток MySQL не связан с одним и тем же потоком операционной системы на протяжении всего своего существования,
THREAD_OS_IDсодержитNULL. Это типично для пользовательских сессий при использовании плагина пула потоков (см. Раздел 5.5.3, «MySQL Enterprise Thread Pool»).
Для Windows,
THREAD_OS_IDсоответствует идентификатору потока, видимому в Process Explorer (https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx).Для Linux,
THREAD_OS_IDсоответствует значению функцииgettid(). Это значение отображается, например, с помощью команд perf или ps -L, или в файловой системеproc(/proc/). Дополнительную информацию см. в справочных страницах[pid]/task/[tid]perf-stat(1),ps(1)иproc(5).
TRUNCATE TABLE не разрешена для таблицы threads.
© 2025 Oracle
Licensed under the GPLv2 License.