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_instancesfile_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_, определённым в заголовочном файлеxxxmysql/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=
valueWHERE NAME = 'wait/synch/mutex/sql/THD::LOCK_query_plan';Эта команда фактически не оказывает никакого влияния:
UPDATE performance_schema.setup_instruments SET ENABLED=
valueWHERE 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.