Spec-Zone.ru › MySQL 8.4

29.12.2.3 Таблица setup_instruments

В таблице setup_instruments перечислены классы инструментированных объектов, для которых можно собирать события:

mysql> SELECT * FROM performance_schema.setup_instruments\G
*************************** 1. row ***************************
         NAME: wait/synch/mutex/pfs/LOCK_pfs_share_list
      ENABLED: NO
        TIMED: NO
   PROPERTIES: singleton
        FLAGS: NULL
   VOLATILITY: 1
DOCUMENTATION: Components can provide their own performance_schema tables.
This lock protects the list of such tables definitions.
...
*************************** 410. row ***************************
         NAME: stage/sql/executing
      ENABLED: NO
        TIMED: NO
   PROPERTIES:
        FLAGS: NULL
   VOLATILITY: 0
DOCUMENTATION: NULL
...
*************************** 733. row ***************************
         NAME: statement/abstract/Query
      ENABLED: YES
        TIMED: YES
   PROPERTIES: mutable
        FLAGS: NULL
   VOLATILITY: 0
DOCUMENTATION: SQL query just received from the network.
At this point, the real statement type is unknown, the type
will be refined after SQL parsing.
...
*************************** 737. row ***************************
         NAME: memory/performance_schema/mutex_instances
      ENABLED: YES
        TIMED: NULL
   PROPERTIES: global_statistics
        FLAGS:
   VOLATILITY: 1
DOCUMENTATION: Memory used for table performance_schema.mutex_instances
...
*************************** 823. row ***************************
         NAME: memory/sql/Prepared_statement::infrastructure
      ENABLED: YES
        TIMED: NULL
   PROPERTIES: controlled_by_default
        FLAGS: controlled
   VOLATILITY: 0
DOCUMENTATION: Map infrastructure for prepared statements per session.
...

Каждый инструмент, добавленный в исходный код, добавляет строку в таблицу setup_instruments, даже если инструментированный код не выполняется. Когда инструмент включен и выполняется, создаются экземпляры инструментированных объектов, которые видны в таблицах xxx_instances, таких как file_instances или rwlock_instances.

Изменения в большинстве строк таблицы setup_instruments влияют на мониторинг немедленно. Для некоторых инструментов изменения действуют только при запуске сервера; изменение их во время работы сервера не имеет никакого эффекта. Это в первую очередь касается мьютексов, условных переменных и rwlocks на сервере, хотя могут быть и другие инструменты, для которых это верно.

Дополнительную информацию о роли таблицы setup_instruments в фильтрации событий см. в разделе 29.4.3, «Предварительная фильтрация событий».

Таблица setup_instruments содержит следующие столбцы:

  • NAME

    Имя инструмента. Имена инструментов могут иметь несколько частей и образовывать иерархию, как описано в разделе 29.6, «Конвенции именования инструментов Performance Schema». События, сгенерированные в результате выполнения инструмента, имеют значение EVENT_NAME, которое взято из значения инструмента NAME. (События фактически не имеют «имени», но это предоставляет способ сопоставления событий с инструментами.)

  • ENABLED

    Включен ли инструмент. Значение равно YES или NO. Выключенный инструмент не генерирует событий. Этот столбец можно изменять, хотя установка ENABLED не имеет эффекта для инструментов, которые уже были созданы.

  • TIMED

    Отслеживается ли время работы инструмента. Значение равно YES, NO или NULL. Этот столбец можно изменять, хотя установка TIMED не имеет эффекта для инструментов, которые уже были созданы.

    Значение TIMED, равное NULL, указывает, что инструмент не поддерживает измерение времени. Например, операции с памятью не отслеживаются по времени, поэтому их столбец TIMED имеет значение NULL.

    Установка TIMED в NULL для инструмента, поддерживающего измерение времени, не имеет эффекта, как и установка TIMED в не-NULL для инструмента, не поддерживающего измерение времени.

    Если включенный инструмент не отслеживает время, код инструмента включен, но таймер не включен. События, созданные инструментом, имеют NULL для значений таймера TIMER_START, TIMER_END и TIMER_WAIT. Это, в свою очередь, приводит к игнорированию этих значений при вычислении суммарных, минимальных, максимальных и средних значений времени в сводных таблицах.

  • PROPERTIES

    Свойства инструмента. Этот столбец использует тип данных SET, поэтому для каждого инструмента можно установить несколько флагов из следующего списка:

    • controlled_by_default: память собирается по умолчанию для этого инструмента.

    • global_statistics: Инструмент генерирует только сводные данные по всему серверу. Сводные данные для более мелких уровней, таких как по потоку, счету, пользователю или хосту, недоступны. Например, большинство инструментов памяти генерируют только сводные данные по всему серверу.

    • mutable: Инструмент может «преобразовываться» в более конкретный. Это свойство применимо только к инструментам утверждений.

    • progress: Инструмент может сообщать данные о ходе выполнения. Это свойство применимо только к инструментам этапов.

    • singleton: Инструмент имеет единственный экземпляр. Например, большинство глобальных блокировок мьютексов на сервере являются одиночными объектами, поэтому соответствующие инструменты тоже.

    • user: Инструмент непосредственно связан с рабочей нагрузкой пользователя (в отличие от рабочей нагрузки системы). Одним из таких инструментов является wait/io/socket/sql/client_connection.

  • FLAGS

    Управляется ли память инструмента.

    Этот флаг поддерживается только для инструментов памяти, не относящихся к глобальным, и может быть установлен или сброшен. Например:

                  SQL> UPDATE PERFORMANCE_SCHEMA.SETUP_INTRUMENTS SET FLAGS="controlled" WHERE NAME='memory/sql/NET::buff';
                
    Примечание

    Попытка установить FLAGS = controlled для инструментов, не относящихся к памяти, или для глобальных инструментов памяти, завершается молчаливо.

  • VOLATILITY

    Изменчивость инструмента. Значения изменчивости варьируются от низких до высоких. Значения соответствуют константам PSI_VOLATILITY_xxx, определённым в заголовочном файле mysql/psi/psi_base.h:

    #define PSI_VOLATILITY_UNKNOWN 0
    #define PSI_VOLATILITY_PERMANENT 1
    #define PSI_VOLATILITY_PROVISIONING 2
    #define PSI_VOLATILITY_DDL 3
    #define PSI_VOLATILITY_CACHE 4
    #define PSI_VOLATILITY_SESSION 5
    #define PSI_VOLATILITY_TRANSACTION 6
    #define PSI_VOLATILITY_QUERY 7
    #define PSI_VOLATILITY_INTRA_QUERY 8
    

    Столбец VOLATILITY является чисто информативным, чтобы предоставить пользователям (и коду Performance Schema) некоторое представление о поведении инструмента во время выполнения.

    Инструменты с низким индексом изменчивости (PERMANENT = 1) создаются один раз при запуске сервера и никогда не уничтожаются или не пересоздаются во время обычной работы сервера. Они уничтожаются только во время завершения работы сервера.

    Например, мьютекс wait/synch/mutex/pfs/LOCK_pfs_share_list определён с изменчивостью 1, что означает, что он создаётся один раз. Возможные накладные расходы от самого инструментирования (а именно, инициализация мьютекса) для этого инструмента не влияют. Накладные расходы во время выполнения возникают только при блокировке или разблокировке мьютекса.

    Инструменты с более высоким индексом изменчивости (например, SESSION = 5) создаются и уничтожаются для каждой сессии пользователя. Например, мьютекс wait/synch/mutex/sql/THD::LOCK_query_plan создаётся каждый раз, когда подключается сессия, и уничтожается, когда сессия отключается.

    Этот мьютекс более чувствителен к накладным расходам Performance Schema, потому что накладные расходы возникают не только от инструментирования блокировки и разблокировки, но также от инструментирования создания и уничтожения мьютекса, которые выполняются чаще.

    Другой аспект изменчивости касается того, действительно ли и когда обновление столбца ENABLED оказывает какое-либо влияние:

    • Обновление ENABLED влияет на созданные впоследствии инструментированные объекты, но не влияет на уже созданные инструменты.

    • Инструменты, которые более «изменчивые», быстрее используют новые настройки из таблицы setup_instruments.

    Например, эта команда не влияет на мьютекс LOCK_query_plan для существующих сессий, но оказывает влияние на новые сессии, созданные после обновления:

    UPDATE performance_schema.setup_instruments
    SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/sql/THD::LOCK_query_plan';
    

    Эта команда фактически не оказывает никакого влияния:

    UPDATE performance_schema.setup_instruments
    SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/pfs/LOCK_pfs_share_list';
    

    Этот мьютекс постоянный и был создан до выполнения обновления. Мьютекс никогда не создаётся снова, поэтому значение ENABLED в setup_instruments никогда не используется. Чтобы включить или отключить этот мьютекс, используйте таблицу mutex_instances вместо этого.

  • DOCUMENTATION

    Строка, описывающая назначение инструмента. Значение равно NULL, если описание недоступно.

Таблица setup_instruments имеет следующие индексы:

  • Основной ключ по (NAME)

TRUNCATE TABLE не разрешена для таблицы setup_instruments.

Для помощи в мониторинге и устранении неполадок используется инструментирование Performance Schema для экспорта имен инструментированных потоков в операционную систему. Это позволяет утилитам, отображающим имена потоков, таким как отладчики и команда Unix ps, отображать разные имена потоков mysqld вместо «“mysqld”. Эта функция поддерживается только на Linux, macOS и Windows.

Предположим, что mysqld работает на системе, которая имеет версию ps, поддерживающую этот синтаксис вызова:

ps -C mysqld H -o "pid tid cmd comm"

Без экспорта имён потоков в операционную систему команда отображает вывод, подобный этому, где большинство значений COMMAND являются mysqld:

  PID   TID CMD                         COMMAND
 1377  1377 /usr/sbin/mysqld            mysqld
 1377  1528 /usr/sbin/mysqld            mysqld
 1377  1529 /usr/sbin/mysqld            mysqld
 1377  1530 /usr/sbin/mysqld            mysqld
 1377  1531 /usr/sbin/mysqld            mysqld
 1377  1534 /usr/sbin/mysqld            mysqld
 1377  1535 /usr/sbin/mysqld            mysqld
 1377  1588 /usr/sbin/mysqld            xpl_worker1
 1377  1589 /usr/sbin/mysqld            xpl_worker0
 1377  1590 /usr/sbin/mysqld            mysqld
 1377  1594 /usr/sbin/mysqld            mysqld
 1377  1595 /usr/sbin/mysqld            mysqld

С экспортом имён потоков в операционную систему вывод выглядит так, с потоками, имеющими имя, подобное имени их инструмента:

  PID   TID CMD                         COMMAND
27668 27668 /usr/sbin/mysqld            mysqld
27668 27671 /usr/sbin/mysqld            ib_io_ibuf
27668 27672 /usr/sbin/mysqld            ib_io_log
27668 27673 /usr/sbin/mysqld            ib_io_rd-1
27668 27674 /usr/sbin/mysqld            ib_io_rd-2
27668 27677 /usr/sbin/mysqld            ib_io_wr-1
27668 27678 /usr/sbin/mysqld            ib_io_wr-2
27668 27699 /usr/sbin/mysqld            xpl_worker-2
27668 27700 /usr/sbin/mysqld            xpl_accept-1
27668 27710 /usr/sbin/mysqld            evt_sched
27668 27711 /usr/sbin/mysqld            sig_handler
27668 27933 /usr/sbin/mysqld            connection

Разные экземпляры потоков в рамках одного класса нумеруются, чтобы обеспечить возможность создания уникальных имён, где это возможно. Из-за ограничений на длину имён в отношении потенциально большого количества подключений, подключения именуются просто connection.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/performance-schema-setup-instruments-table.html

Spec-Zone.ru

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