29.12.22.9 Таблица 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: mysql
PROCESSLIST_COMMAND: NULL
PROCESSLIST_TIME: 418094
PROCESSLIST_STATE: NULL
PROCESSLIST_INFO: NULL
PARENT_THREAD_ID: NULL
ROLE: NULL
INSTRUMENTED: YES
HISTORY: YES
CONNECTION_TYPE: NULL
THREAD_OS_ID: 5856
RESOURCE_GROUP: SYS_default
EXECUTION_ENGINE: PRIMARY
CONTROLLED_MEMORY: 1456
MAX_CONTROLLED_MEMORY: 67480
TOTAL_MEMORY: 1270430
MAX_TOTAL_MEMORY: 1307317
TELEMETRY_ACTIVE: NO
...
При инициализации Performance Schema он заполняет таблицу threads на основе существующих потоков. После этого, при создании сервером нового потока добавляется новая строка.
Значения столбцов INSTRUMENTED и HISTORY для новых потоков определяются содержимым таблицы setup_actors. Подробнее о том, как использовать таблицу setup_actors для управления этими столбцами, см. раздел 29.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 NAME, ENABLED, TIMEDFROM 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, если сессия простаивает. Для описаний команд потоков см. Раздел 10.14, “Просмотр информации о потоке сервера (процессе)”. Значение этого столбца соответствует командамCOM_протокола клиент-сервер и переменным состоянияxxxCom_. См. Раздел 7.1.10, “Переменные состояния сервера”xxxПотоки заднего плана не выполняют команды от имени клиентов, поэтому этот столбец может быть
NULL. -
PROCESSLIST_TIMEВремя в секундах, которое поток находится в текущем состоянии. Для реплицирующего SQL-потока значение равно количеству секунд между меткой времени последнего реплицированного события и реальным временем хоста реплики. См. Раздел 19.2.3, “Потоки репликации”.
-
PROCESSLIST_STATEДействие, событие или состояние, указывающее, что делает поток. Для описаний значений
PROCESSLIST_STATEсм. Раздел 10.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, установленных в значениеYES.Столбец
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. Это типично для сессий пользователей, когда используется плагин пула потоков (см. Раздел 7.6.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). -
RESOURCE_GROUPМетка группы ресурсов. Это значение
NULL, если группы ресурсов не поддерживаются на текущей платформе или в конфигурации сервера (см. Ограничения на группы ресурсов). -
EXECUTION_ENGINEДвижок выполнения запросов. Значение равно либо
PRIMARY, либоSECONDARY. При использовании HeatWave Service и HeatWave, где движокPRIMARYявляетсяInnoDB, а движокSECONDARY— HeatWave (RAPID). Для MySQL Community Edition Server, MySQL Enterprise Edition Server (локальный), и HeatWave Service без HeatWave значение всегдаPRIMARY. -
CONTROLLED_MEMORYКоличество используемой потоком управляемой памяти.
-
MAX_CONTROLLED_MEMORYМаксимальное значение
CONTROLLED_MEMORY, наблюдаемое во время выполнения потока. -
TOTAL_MEMORYТекущее количество используемой потоком памяти, управляемой или нет.
-
MAX_TOTAL_MEMORYМаксимальное значение
TOTAL_MEMORY, наблюдаемое во время выполнения потока. -
TELEMETRY_ACTIVEНаличие активной телеметрии, прикрепленной к потоку. Значение равно
YESилиNO.
В таблице threads имеются следующие индексы:
Первичный ключ по (
THREAD_ID)Индекс по (
NAME)Индекс по (
PROCESSLIST_ID)Индекс по (
PROCESSLIST_USER,PROCESSLIST_HOST)Индекс по (
PROCESSLIST_HOST)Индекс по (
THREAD_OS_ID)Индекс по (
RESOURCE_GROUP)
TRUNCATE TABLE не разрешен для таблицы threads.
© 2025 Oracle
Licensed under the GPLv2 License.