Spec-Zone.ru › MySQL 9.2

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_SCHEMA PROCESSLIST, отображаемом в столбце Id вывода SHOW PROCESSLIST и возвращаемом функцией CONNECTION_ID() внутри потока.

    Для потока заднего плана (не связанного с подключением пользователя) PROCESSLIST_ID является NULL, поэтому значения не уникальны.

  • PROCESSLIST_USER

    Пользователь, связанный с потоком переднего плана, NULL для потока заднего плана.

  • PROCESSLIST_HOST

    Имя хоста клиента, связанного с потоком переднего плана, NULL для потока заднего плана.

    В отличие от столбца HOST таблицы INFORMATION_SCHEMA PROCESSLIST или столбца Host вывода SHOW PROCESSLIST, столбец PROCESSLIST_HOST не включает номер порта для TCP/IP-соединений. Чтобы получить эту информацию из Performance Schema, включите инструментирование сокетов (которое по умолчанию не включено) и изучите таблицу socket_instances:

    mysql> SELECT NAME, ENABLED, TIMED
           FROM performance_schema.setup_instruments
           WHERE 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_instruments
           SET 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_xxx протокола клиент-сервер и переменным состояния Com_xxx. См. Раздел 7.1.10, “Переменные состояния сервера”

    Потоки заднего плана не выполняют команды от имени клиентов, поэтому этот столбец может быть 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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/performance-schema-threads-table.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API