Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел кратко начинает Схему Производительности с примеров, которые показывают, как использовать это. Для дополнительных примеров см. Раздел 20.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....
Если такие переменные не появляются в выводе, Ваш сервер не был создан, чтобы поддерживать Схему Производительности. В этом случае см. Раздел 20.2, "Конфигурация Схемы Производительности".
Предполагая, что Схема Производительности доступна, она включается по умолчанию. Чтобы включить или отключить
это явно, запустите сервер с 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
база данных может быть сгруппирована согласно типу
информации в них: Текущие события, истории события и сводки, возражают экземплярам, и установке (конфигурация)
информация. Следующие примеры иллюстрируют несколько использования для этих таблиц. Для получения дальнейшей
информации о таблицах в каждой группе, см. Раздел 20.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
подсистема.
Первые немного столбцов предоставляют следующую информацию:
Столбцы ID указывают, какой поток событие прибывает из и число события.
EVENT_NAME
указывает на то, что было инструментовано и
SOURCE
указывает, какой исходный файл содержит инструментованный код.
Шоу столбцов таймера, когда событие запустилось и остановилось и сколько времени
это взяло. Если событие все еще происходит, TIMER_END
и TIMER_WAIT
значения NULL
. Значения таймера
приблизительны и выражаются в пикосекундах. Для получения информации о таймерах и наборе времени
события, см. Раздел 20.2.3.1, "Синхронизация
События Схемы Производительности".
Таблицы истории содержат тот же самый вид строк как таблица текущих событий, но имеют больше строк и показывают
то, что сервер делал "недавно", а не "в настоящий момент". 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 |...
Чтобы понять, как интерпретировать инструментальные имена, см. Раздел 20.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
значение.
Для получения дополнительной информации о таблицах установки и как использовать их, чтобы управлять набором события, см. Раздел 20.2.3.2, "Фильтрация событий Схемы Производительности".
Есть некоторые разные таблицы, которые не попадают ни в одну из предыдущих групп. Например, performance_timers
перечисляет доступные таймеры события и их характеристики. Для
получения информации о таймерах см. Раздел 20.2.3.1, "Синхронизация
События Схемы Производительности".