Spec-Zone.ru › MySQL 5.7

25.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_lost указывает, сколько инструментов типа xxx не удалось загрузить.

  • Performance_schema_xxx_instances_lost указывает, сколько экземпляров объекта типа xxx не удалось создать.

  • Performance_schema_xxx_handles_lost указывает, сколько экземпляров объекта типа xxx не удалось открыть.

  • 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=N, где N меньше значения по умолчанию. Значение по умолчанию выбрано для обеспечения достаточного количества памяти для загрузки всех плагинов, предоставляемых в дистрибутиве 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 на потребление памяти. Для описания значений полей см. Раздел 13.7.5.15, «Оператор SHOW ENGINE».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/performance-schema-status-monitoring.html

Spec-Zone.ru

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