Spec-Zone.ru › MySQL 9.2

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-9.2-en/performance-schema-setup-instruments-table.html

Spec-Zone.ru

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