Spec-Zone.ru › MySQL 5.7

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_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 * 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, если сеанс простаивает. Описание команд потоков см. в разделе 8.14, «Просмотр информации о потоках сервера (процессе)». Значение этого столбца соответствует командам COM_xxx протокола клиент/сервер и переменным состояния Com_xxx. См. раздел 5.1.9, «Переменные состояния сервера»

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

Spec-Zone.ru

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