Spec-Zone .ru
спецификации, руководства, описания, API

21.1. Быстрый запуск Схемы производительности

Этот раздел кратко начинает Схему Производительности с примеров, которые показывают, как использовать это. Для дополнительных примеров см. Раздел 21.15, "Используя Схему Производительности, чтобы Диагностировать проблемы".

Для Схемы Производительности, чтобы быть доступной, должно быть, была сконфигурирована поддержка этого, когда MySQL был создан. Можно проверить ли дело обстоит так, проверяя вывод справки сервера. Если Схема Производительности будет доступна, то вывод упомянет несколько переменных с именами, которые начинаются performance_schema:

shell> mysqld --verbose --help...  --performance_schema                      Enable the performance schema.  --performance_schema_events_waits_history_long_size=#                      Number of rows in events_waits_history_long....

Если такие переменные не появляются в выводе, Ваш сервер не был создан, чтобы поддерживать Схему Производительности. В этом случае см. Раздел 21.2, "Конфигурация Схемы Производительности".

Предполагая, что Схема Производительности доступна, она включается по умолчанию с MySQL 5.6.6. Прежде 5.6.6, это отключается по умолчанию. Чтобы включить или отключить это явно, запустите сервер с performance_schema переменный набор к соответствующему значению. Например, используйте эти строки в Вашем my.cnf файл:

[mysqld]performance_schema=on

Когда сервер запускается, он видит performance_schema и попытки инициализировать Схему Производительности. Чтобы проверить успешную инициализацию, используйте этот оператор:

mysql> SHOW VARIABLES LIKE
        'performance_schema';+--------------------+-------+| Variable_name      | Value |+--------------------+-------+| performance_schema | ON    |+--------------------+-------+

Значение ON средства, что Схема Производительности, инициализированная успешно и, готова к употреблению. Значение OFF средства, что некоторая ошибка произошла. Проверьте журнал ошибок сервера на информацию о том, что пошло не так, как надо.

Схема Производительности реализуется как механизм хранения. Если этот механизм доступен (который следует уже проверить ранее), следует видеть, что он перечислял с a SUPPORT значение YES в выводе от INFORMATION_SCHEMA.ENGINES таблица или SHOW ENGINES оператор:

mysql> SELECT * FROM
        INFORMATION_SCHEMA.ENGINES    -> WHERE
        ENGINE='PERFORMANCE_SCHEMA'\G*************************** 1. row ***************************      ENGINE: PERFORMANCE_SCHEMA     SUPPORT: YES     COMMENT: Performance SchemaTRANSACTIONS: NO          XA: NO  SAVEPOINTS: NOmysql> SHOW ENGINES\G...      Engine: PERFORMANCE_SCHEMA     Support: YES     Comment: Performance SchemaTransactions: NO          XA: NO  Savepoints: NO...

PERFORMANCE_SCHEMA механизм хранения работает на таблицах в performance_schema база данных. Можно сделать performance_schema база данных значения по умолчанию так, чтобы ссылки на ее таблицы не были квалифицированы с именем базы данных:

mysql> USE performance_schema;

Много примеров в этой главе принимают это performance_schema база данных значения по умолчанию.

Таблицы Схемы производительности сохранены в performance_schema база данных. Информация о структуре этой базы данных и ее таблиц может быть получена, что касается любой другой базы данных, выбирая из INFORMATION_SCHEMA база данных или при использовании SHOW операторы. Например, используйте любой из этих операторов, чтобы видеть, какие таблицы Схемы Производительности существуют:

mysql> SELECT TABLE_NAME FROM
        INFORMATION_SCHEMA.TABLES    -> WHERE TABLE_SCHEMA =
        'performance_schema';+----------------------------------------------------+| TABLE_NAME                                         |+----------------------------------------------------+| accounts                                           || cond_instances                                     || events_stages_current                              || events_stages_history                              || events_stages_history_long                         || events_stages_summary_by_account_by_event_name     || events_stages_summary_by_host_by_event_name        || events_stages_summary_by_thread_by_event_name      || events_stages_summary_by_user_by_event_name        || events_stages_summary_global_by_event_name         || events_statements_current                          || events_statements_history                          || events_statements_history_long                     |...| file_instances                                     || file_summary_by_event_name                         || file_summary_by_instance                           || host_cache                                         || hosts                                              || mutex_instances                                    || objects_summary_global_by_type                     || performance_timers                                 || rwlock_instances                                   || session_account_connect_attrs                      || session_connect_attrs                              || setup_actors                                       || setup_consumers                                    || setup_instruments                                  || setup_objects                                      || setup_timers                                       || socket_instances                                   || socket_summary_by_event_name                       || socket_summary_by_instance                         || table_io_waits_summary_by_index_usage              || table_io_waits_summary_by_table                    || table_lock_waits_summary_by_table                  || threads                                            || users                                              |+----------------------------------------------------+mysql> SHOW TABLES FROM performance_schema;+----------------------------------------------------+| Tables_in_performance_schema                       |+----------------------------------------------------+| accounts                                           || cond_instances                                     || events_stages_current                              || events_stages_history                              || events_stages_history_long                         |...

Число таблиц Схемы Производительности, как ожидают, увеличится в течение долгого времени, поскольку реализация дополнительного инструментария продолжается.

Имя performance_schema база данных является нижним регистром, как имена таблиц в пределах этого. Запросы должны определить имена в нижнем регистре.

Чтобы видеть структуру отдельных таблиц, использовать SHOW CREATE TABLE:

mysql> SHOW CREATE TABLE
        setup_timers\G*************************** 1. row ***************************       Table: setup_timersCreate Table: CREATE TABLE `setup_timers` (  `NAME` varchar(64) NOT NULL,  `TIMER_NAME` enum('CYCLE','NANOSECOND','MICROSECOND','MILLISECOND','TICK')   NOT NULL) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8

Структура таблицы также доступна, выбирая из таблиц такой как INFORMATION_SCHEMA.COLUMNS или при использовании операторов такой как SHOW COLUMNS.

Таблицы в performance_schema база данных может быть сгруппирована согласно типу информации в них: Текущие события, истории события и сводки, возражают экземплярам, и установке (конфигурация) информация. Следующие примеры иллюстрируют несколько использования для этих таблиц. Для получения дальнейшей информации о таблицах в каждой группе, см. Раздел 21.9, "Табличные Описания Схемы Производительности".

Чтобы видеть, что сервер делает в настоящее время, исследуйте events_waits_current таблица. Это содержит одну строку на поток, показывая новое следившее за развитием событие каждого потока:

mysql> SELECT * FROM
        events_waits_current\G*************************** 1. row ***************************            THREAD_ID: 0             EVENT_ID: 5523           EVENT_NAME: wait/synch/mutex/mysys/THR_LOCK::mutex               SOURCE: thr_lock.c:525          TIMER_START: 201660494489586            TIMER_END: 201660494576112           TIMER_WAIT: 86526                SPINS: NULL        OBJECT_SCHEMA: NULL          OBJECT_NAME: NULL          OBJECT_TYPE: NULLOBJECT_INSTANCE_BEGIN: 142270668     NESTING_EVENT_ID: NULL            OPERATION: lock      NUMBER_OF_BYTES: NULL                FLAGS: 0...

Это событие указывает, что распараллеливают 0, ожидал 86 526 пикосекунд, чтобы получить блокировку на THR_LOCK::mutex, взаимное исключение в mysys подсистема. Первые немного столбцов предоставляют следующую информацию:

Таблицы истории содержат тот же самый вид строк как таблица текущих событий, но имеют больше строк и показывают то, что сервер делал "недавно", а не "в настоящий момент". events_waits_history и events_waits_history_long таблицы содержат новые 10 событий на поток и новые 10 000 событий, соответственно. Например, чтобы видеть информацию для недавних событий, произведенных потоком 13, сделайте это:

mysql> SELECT EVENT_ID, EVENT_NAME, TIMER_WAIT    -> FROM events_waits_history WHERE THREAD_ID = 13    -> ORDER BY EVENT_ID;+----------+-----------------------------------------+------------+| EVENT_ID | EVENT_NAME                              | TIMER_WAIT |+----------+-----------------------------------------+------------+|       86 | wait/synch/mutex/mysys/THR_LOCK::mutex  |     686322 ||       87 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     320535 ||       88 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     339390 ||       89 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     377100 ||       90 | wait/synch/mutex/sql/LOCK_plugin        |     614673 ||       91 | wait/synch/mutex/sql/LOCK_open          |     659925 ||       92 | wait/synch/mutex/sql/THD::LOCK_thd_data |     494001 ||       93 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     222489 ||       94 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     214947 ||       95 | wait/synch/mutex/mysys/LOCK_alarm       |     312993 |+----------+-----------------------------------------+------------+

Поскольку новые события добавляются к таблице истории, более старые события отбрасываются, если таблица полна.

Сводные таблицы предоставляют агрегированную информацию для всех событий в течение долгого времени. Таблицы в этой группе суммируют данные события по-разному. Чтобы видеть, какие инструменты были выполнены большинство раз или заняли большинство времени ожидания, сортируйте events_waits_summary_global_by_event_name таблица на COUNT_STAR или SUM_TIMER_WAIT столбец, которые соответствуют a COUNT(*) или SUM(TIMER_WAIT) значение, соответственно, вычисляло по всем событиям:

mysql> SELECT EVENT_NAME, COUNT_STAR    -> FROM events_waits_summary_global_by_event_name    -> ORDER BY COUNT_STAR DESC LIMIT 10;+---------------------------------------------------+------------+| EVENT_NAME                                        | COUNT_STAR |+---------------------------------------------------+------------+| wait/synch/mutex/mysys/THR_LOCK_malloc            |       6419 || wait/io/file/sql/FRM                              |        452 || wait/synch/mutex/sql/LOCK_plugin                  |        337 || wait/synch/mutex/mysys/THR_LOCK_open              |        187 || wait/synch/mutex/mysys/LOCK_alarm                 |        147 || wait/synch/mutex/sql/THD::LOCK_thd_data           |        115 || wait/io/file/myisam/kfile                         |        102 || wait/synch/mutex/sql/LOCK_global_system_variables |         89 || wait/synch/mutex/mysys/THR_LOCK::mutex            |         89 || wait/synch/mutex/sql/LOCK_open                    |         88 |+---------------------------------------------------+------------+mysql> SELECT EVENT_NAME, SUM_TIMER_WAIT    -> FROM events_waits_summary_global_by_event_name    -> ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;+----------------------------------------+----------------+| EVENT_NAME                             | SUM_TIMER_WAIT |+----------------------------------------+----------------+| wait/io/file/sql/MYSQL_LOG             |     1599816582 || wait/synch/mutex/mysys/THR_LOCK_malloc |     1530083250 || wait/io/file/sql/binlog_index          |     1385291934 || wait/io/file/sql/FRM                   |     1292823243 || wait/io/file/myisam/kfile              |      411193611 || wait/io/file/myisam/dfile              |      322401645 || wait/synch/mutex/mysys/LOCK_alarm      |      145126935 || wait/io/file/sql/casetest              |      104324715 || wait/synch/mutex/sql/LOCK_plugin       |       86027823 || wait/io/file/sql/pid                   |       72591750 |+----------------------------------------+----------------+

Эти результаты показывают что THR_LOCK_malloc взаимное исключение "горячо", и с точки зрения того, как часто оно используется и количество времени, которое потоки ожидают, пытаясь получить его.

Отметить

THR_LOCK_malloc взаимное исключение используется только в отладке, создает. В производстве создает это, не горячо, потому что это является несуществующим.

Табличный документ экземпляра, какие типы объектов инструментуются. Инструментованный объект, когда использующийся сервером, производит событие. Эти таблицы обеспечивают имена события и примечания или информацию о статусе. Например, file_instances таблица приводит экземпляры инструментов для операций файлового ввода-вывода и их связанных файлов:

mysql> SELECT * FROM file_instances\G*************************** 1. row *************************** FILE_NAME: /opt/mysql-log/60500/binlog.000007EVENT_NAME: wait/io/file/sql/binlogOPEN_COUNT: 0*************************** 2. row *************************** FILE_NAME: /opt/mysql/60500/data/mysql/tables_priv.MYIEVENT_NAME: wait/io/file/myisam/kfileOPEN_COUNT: 1*************************** 3. row *************************** FILE_NAME: /opt/mysql/60500/data/mysql/columns_priv.MYIEVENT_NAME: wait/io/file/myisam/kfileOPEN_COUNT: 1...

Таблицы установки используются, чтобы сконфигурировать и вывести на экран контролирующие характеристики. Например, чтобы видеть, какие таймеры события выбираются, запросите setup_timers таблицы:

mysql> SELECT * FROM setup_timers;+-----------+-------------+| NAME      | TIMER_NAME  |+-----------+-------------+| idle      | MICROSECOND || wait      | CYCLE       || stage     | NANOSECOND  || statement | NANOSECOND  |+-----------+-------------+

setup_instruments перечисляет набор инструментов, для которых события могут быть собраны и шоу, которые из них включаются:

mysql> SELECT * FROM
        setup_instruments;+------------------------------------------------------------+---------+-------+| NAME                                                       | ENABLED | TIMED |+------------------------------------------------------------+---------+-------+...| wait/synch/mutex/sql/LOCK_global_read_lock                 | YES     | YES   || wait/synch/mutex/sql/LOCK_global_system_variables          | YES     | YES   || wait/synch/mutex/sql/LOCK_lock_db                          | YES     | YES   || wait/synch/mutex/sql/LOCK_manager                          | YES     | YES   |...| wait/synch/rwlock/sql/LOCK_grant                           | YES     | YES   || wait/synch/rwlock/sql/LOGGER::LOCK_logger                  | YES     | YES   || wait/synch/rwlock/sql/LOCK_sys_init_connect                | YES     | YES   || wait/synch/rwlock/sql/LOCK_sys_init_slave                  | YES     | YES   |...| wait/io/file/sql/binlog                                    | YES     | YES   || wait/io/file/sql/binlog_index                              | YES     | YES   || wait/io/file/sql/casetest                                  | YES     | YES   || wait/io/file/sql/dbopt                                     | YES     | YES   |...

Чтобы понять, как интерпретировать инструментальные имена, см. Раздел 21.4, "Инструментальные Соглашения о присвоении имен Схемы Производительности".

Чтобы управлять, собираются ли события для инструмента, устанавливает ENABLED значение к YES или NO. Например:

mysql> UPDATE setup_instruments SET ENABLED =
        'NO'    -> WHERE NAME =
        'wait/synch/mutex/sql/LOCK_mysql_create_db';

Схема Производительности использует собранные события, чтобы обновить таблицы в performance_schema база данных, которые действуют как "потребители" информации о событии. setup_consumers таблица приводит доступных потребителей и которые включаются:

mysql> SELECT * FROM setup_consumers;+--------------------------------+---------+| NAME                           | ENABLED |+--------------------------------+---------+| events_stages_current          | NO      || events_stages_history          | NO      || events_stages_history_long     | NO      || events_statements_current      | YES     || events_statements_history      | NO      || events_statements_history_long | NO      || events_waits_current           | NO      || events_waits_history           | NO      || events_waits_history_long      | NO      || global_instrumentation         | YES     || thread_instrumentation         | YES     || statements_digest              | YES     |+--------------------------------+---------+

Чтобы управлять, поддерживает ли Схема Производительности потребителя как место назначения для информации о событии, устанавливает ENABLED значение.

Для получения дополнительной информации о таблицах установки и как использовать их, чтобы управлять набором события, см. Раздел 21.2.3.2, "Фильтрация событий Схемы Производительности".

Есть некоторые разные таблицы, которые не попадают ни в одну из предыдущих групп. Например, performance_timers перечисляет доступные таймеры события и их характеристики. Для получения информации о таймерах см. Раздел 21.2.3.1, "Синхронизация События Схемы Производительности".