29.7 Мониторинг состояния Performance Schema
Для Performance Schema существует несколько переменных состояния:
mysql> SHOW STATUS LIKE 'perf%';
+-----------------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------------+-------+
| Performance_schema_accounts_lost | 0 |
| Performance_schema_cond_classes_lost | 0 |
| Performance_schema_cond_instances_lost | 0 |
| Performance_schema_digest_lost | 0 |
| Performance_schema_file_classes_lost | 0 |
| Performance_schema_file_handles_lost | 0 |
| Performance_schema_file_instances_lost | 0 |
| Performance_schema_hosts_lost | 0 |
| Performance_schema_locker_lost | 0 |
| Performance_schema_memory_classes_lost | 0 |
| Performance_schema_metadata_lock_lost | 0 |
| Performance_schema_mutex_classes_lost | 0 |
| Performance_schema_mutex_instances_lost | 0 |
| Performance_schema_nested_statement_lost | 0 |
| Performance_schema_program_lost | 0 |
| Performance_schema_rwlock_classes_lost | 0 |
| Performance_schema_rwlock_instances_lost | 0 |
| Performance_schema_session_connect_attrs_lost | 0 |
| Performance_schema_socket_classes_lost | 0 |
| Performance_schema_socket_instances_lost | 0 |
| Performance_schema_stage_classes_lost | 0 |
| Performance_schema_statement_classes_lost | 0 |
| Performance_schema_table_handles_lost | 0 |
| Performance_schema_table_instances_lost | 0 |
| Performance_schema_thread_classes_lost | 0 |
| Performance_schema_thread_instances_lost | 0 |
| Performance_schema_users_lost | 0 |
+-----------------------------------------------+-------+
Переменные состояния Performance Schema предоставляют информацию об инструментах, которые не могли быть загружены или созданы из-за ограничений памяти. Названия этих переменных имеют несколько форм:
Performance_schema_указывает, сколько инструментов типаxxx_classes_lostxxxне удалось загрузить.Performance_schema_указывает, сколько экземпляров объекта типаxxx_instances_lostxxxне удалось создать.Performance_schema_указывает, сколько экземпляров объекта типаxxx_handles_lostxxxне удалось открыть.Performance_schema_locker_lostуказывает, сколько событий «“утеряны”» или не были записаны.
Например, если мьютекс инструментирован в исходном коде сервера, но сервер не может выделить память для инструментации во время выполнения, он увеличивает значение Performance_schema_mutex_classes_lost. Мьютекс по-прежнему функционирует как объект синхронизации (то есть сервер продолжает работать нормально), но данные производительности для него не собираются. Если инструмент может быть выделен, он может быть использован для инициализации инструментированных экземпляров мьютексов. Для одиночного мьютекса, такого как глобальный мьютекс, существует только один экземпляр. Другие мьютексы имеют экземпляр на подключение или на страницу в различных кэшах и буферах данных, поэтому количество экземпляров со временем изменяется. Увеличение максимального числа подключений или максимального размера некоторых буферов увеличивает максимальное количество экземпляров, которые могут быть выделены одновременно. Если сервер не может создать данный инструментированный экземпляр мьютекса, он увеличивает Performance_schema_mutex_instances_lost.
Предположим, что выполняются следующие условия:
Сервер был запущен с опцией
--performance_schema_max_mutex_classes=200и, следовательно, имеет место для 200 инструментов мьютексов.Уже загружено 150 инструментов мьютексов.
Плагин под названием
plugin_aсодержит 40 инструментов мьютексов.Плагин под названием
plugin_bсодержит 20 инструментов мьютексов.
Сервер выделяет инструменты мьютексов для плагинов в зависимости от их потребностей и доступности, как показано в следующей последовательности операторов:
INSTALL PLUGIN plugin_a
Теперь на сервере есть 150+40 = 190 инструментов мьютексов.
UNINSTALL PLUGIN plugin_a;
На сервере все еще есть 190 инструментов. Все исторические данные, сгенерированные кодом плагина, все еще доступны, но новые события для инструментов не собираются.
INSTALL PLUGIN plugin_a;
Сервер обнаруживает, что 40 инструментов уже определены, поэтому новые инструменты не создаются, а ранее назначенные внутренние буферы памяти повторно используются. На сервере все еще есть 190 инструментов.
INSTALL PLUGIN plugin_b;
На сервере есть место для 200-190 = 10 инструментов (в данном случае классов мьютексов), и он видит, что плагин содержит 20 новых инструментов. 10 инструментов загружаются, а 10 отбрасываются или «“утеряны”». Performance_schema_mutex_classes_lost указывает количество утерянных инструментов (классов мьютексов):
mysql> SHOW STATUS LIKE "perf%mutex_classes_lost";
+---------------------------------------+-------+
| Variable_name | Value |
+---------------------------------------+-------+
| Performance_schema_mutex_classes_lost | 10 |
+---------------------------------------+-------+
1 row in set (0.10 sec)
Инструментация по-прежнему работает и собирает (частичные) данные для plugin_b.
Когда сервер не может создать инструмент мьютекса, происходят следующие результаты:
Строка для инструмента не вставляется в таблицу
setup_instruments.Performance_schema_mutex_classes_lostувеличивается на 1.Performance_schema_mutex_instances_lostне изменяется. (Когда инструмент мьютекса не создается, он не может использоваться для создания инструментированных экземпляров мьютексов позже.)
Описанный шаблон применим ко всем типам инструментов, а не только к мьютексам.
Значение Performance_schema_mutex_classes_lost больше нуля может быть в двух случаях:
Для экономии нескольких байтов памяти вы запускаете сервер с
--performance_schema_max_mutex_classes=, гдеNNменьше значения по умолчанию. Значение по умолчанию выбрано достаточным для загрузки всех плагинов, предоставленных в дистрибутиве MySQL, но это можно уменьшить, если некоторые плагины никогда не загружаются. Например, вы можете выбрать не загружать некоторые из движков хранения в дистрибутиве.-
Вы загружаете сторонний плагин, который инструментирован для Performance Schema, но не учитываете потребности плагина в памяти инструментации при запуске сервера. Поскольку он поставляется от стороннего разработчика, потребление памяти инструмента этим движком не учитывается при выборе значения по умолчанию для
performance_schema_max_mutex_classes.Если у сервера недостаточно ресурсов для инструментов плагина, и вы не выделяете больше ресурсов явно с помощью
--performance_schema_max_mutex_classes=, загрузка плагина приводит к голоданию инструментов.N
Если значение, выбранное для performance_schema_max_mutex_classes, слишком мало, в журнале ошибок не сообщается об ошибке, и во время выполнения не происходит сбоя. Однако содержимое таблиц в базе данных performance_schema пропустят события. Переменная состояния Performance_schema_mutex_classes_lost является единственным видимым признаком, указывающим на то, что некоторые события были внутренне потеряны из-за невозможности создания инструментов.
Если инструмент не потерян, он известен Performance Schema и используется при инструментировании экземпляров. Например, wait/synch/mutex/sql/LOCK_delete — это имя инструмента мьютекса в таблице setup_instruments. Этот единственный инструмент используется при создании мьютекса в коде (в THD::LOCK_delete), однако количество экземпляров мьютекса необходимо по мере работы сервера. В данном случае LOCK_delete — это мьютекс на подключение (THD), поэтому если сервер имеет 1000 подключений, есть 1000 потоков и 1000 инструментированных экземпляров мьютекса LOCK_delete (THD::LOCK_delete).
Если у сервера нет места для всех этих 1000 инструментированных мьютексов (экземпляров), некоторые мьютексы создаются с инструментацией, а некоторые — без нее. Если сервер может создать только 800 экземпляров, 200 экземпляров теряются. Сервер продолжает работать, но увеличивает Performance_schema_mutex_instances_lost на 200, чтобы указать, что экземпляры не могут быть созданы.
Значение Performance_schema_mutex_instances_lost больше нуля может произойти, когда код инициализирует больше мьютексов во время выполнения, чем было выделено для --performance_schema_max_mutex_instances=.N
В итоге, если SHOW STATUS LIKE
'perf%' показывает, что ничего не потеряно (все значения равны нулю), данные Performance Schema точны и на них можно полагаться. Если что-то было потеряно, данные неполные, и Performance Schema не смог записать все, учитывая недостаточное количество памяти, предоставленное ему для использования. В этом случае конкретная переменная Performance_schema_ указывает проблемную область.xxx_lost
В некоторых случаях может быть целесообразно намеренно вызвать голодание инструментов. Например, если вам не важны данные производительности для операций ввода-вывода файлов, вы можете запустить сервер со всеми параметрами Performance Schema, связанными с вводом-выводом файлов, установленных в 0. Память не выделяется для классов, экземпляров или дескрипторов, связанных с файлами, и все события файлов теряются.
Используйте SHOW ENGINE
PERFORMANCE_SCHEMA STATUS для проверки внутренней работы кода Performance Schema:
mysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\G
...
*************************** 3. row ***************************
Type: performance_schema
Name: events_waits_history.size
Status: 76
*************************** 4. row ***************************
Type: performance_schema
Name: events_waits_history.count
Status: 10000
*************************** 5. row ***************************
Type: performance_schema
Name: events_waits_history.memory
Status: 760000
...
*************************** 57. row ***************************
Type: performance_schema
Name: performance_schema.memory
Status: 26459600
...
Этот оператор предназначен для помощи системному администратору в понимании последствий различных вариантов Performance Schema на потребности памяти. Для описания значений полей см. Раздел 15.7.7.17, «Оператор SHOW ENGINE».
© 2025 Oracle
Licensed under the GPLv2 License.