Spec-Zone.ru › MySQL 8.4

29.12.22.8 Таблица 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 события, выполняемые потоком) и историческую регистрацию событий. Чтобы управлять начальными значениями 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.

    • Столбец 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»).

    Для 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-8.4-en/performance-schema-threads-table.html

Spec-Zone.ru

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