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.