Spec-Zone.ru › MySQL 5.7

25.19.1 Профилирование запросов с помощью Performance Schema

Следующий пример демонстрирует, как использовать события Performance Schema для заявлений и этапов, чтобы получить данные, сопоставимые с информацией о профилировании, предоставляемой командами SHOW PROFILES и SHOW PROFILE.

Таблица setup_actors может использоваться для ограничения сбора исторических событий по хосту, пользователю или учетной записи, чтобы уменьшить накладные расходы во время выполнения и объем данных, собираемых в таблицах истории. Первый шаг примера демонстрирует, как ограничить сбор исторических событий определённым пользователем.

Performance Schema отображает информацию о таймерах событий в пикосекундах (триллионных долях секунды), чтобы нормализовать данные о времени к единице измерения. В следующем примере значения TIMER_WAIT делятся на 1000000000000, чтобы отобразить данные в единицах секунд. Значения также усекаются до 6 десятичных знаков, чтобы отобразить данные в том же формате, что и команды SHOW PROFILES и SHOW PROFILE.

  1. Ограничьте сбор исторических событий пользователем, выполняющим запрос. По умолчанию, setup_actors настроена для мониторинга и сбора исторических событий для всех фоновых потоков:

    mysql> SELECT * FROM performance_schema.setup_actors;
    +------+------+------+---------+---------+
    | HOST | USER | ROLE | ENABLED | HISTORY |
    +------+------+------+---------+---------+
    | %    | %    | %    | YES     | YES     |
    +------+------+------+---------+---------+
    

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

    mysql> UPDATE performance_schema.setup_actors
           SET ENABLED = 'NO', HISTORY = 'NO'
           WHERE HOST = '%' AND USER = '%';
    
    mysql> INSERT INTO performance_schema.setup_actors
           (HOST,USER,ROLE,ENABLED,HISTORY)
           VALUES('localhost','test_user','%','YES','YES');
    

    Данные в таблице setup_actors теперь должны быть похожи на следующие:

    mysql> SELECT * FROM performance_schema.setup_actors;
    +-----------+-----------+------+---------+---------+
    | HOST      | USER      | ROLE | ENABLED | HISTORY |
    +-----------+-----------+------+---------+---------+
    | %         | %         | %    | NO      | NO      |
    | localhost | test_user | %    | YES     | YES     |
    +-----------+-----------+------+---------+---------+
    
  2. Убедитесь, что инструментация заявлений и этапов включена, обновив таблицу setup_instruments. Некоторые инструменты могут быть включены по умолчанию.

    mysql> UPDATE performance_schema.setup_instruments
           SET ENABLED = 'YES', TIMED = 'YES'
           WHERE NAME LIKE '%statement/%';
    
    mysql> UPDATE performance_schema.setup_instruments
           SET ENABLED = 'YES', TIMED = 'YES'
           WHERE NAME LIKE '%stage/%';
    
  3. Убедитесь, что потребители events_statements_* и events_stages_* включены. Некоторые потребители могут быть включены по умолчанию.

    mysql> UPDATE performance_schema.setup_consumers
           SET ENABLED = 'YES'
           WHERE NAME LIKE '%events_statements_%';
    
    mysql> UPDATE performance_schema.setup_consumers
           SET ENABLED = 'YES'
           WHERE NAME LIKE '%events_stages_%';
    
  4. Под учетной записью пользователя, за которым вы следите, запустите оператор, который хотите профилировать. Например:

    mysql> SELECT * FROM employees.employees WHERE emp_no = 10001;
    +--------+------------+------------+-----------+--------+------------+
    | emp_no | birth_date | first_name | last_name | gender | hire_date |
    +--------+------------+------------+-----------+--------+------------+
    |  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
    +--------+------------+------------+-----------+--------+------------+
    
  5. Определите EVENT_ID оператора, запросив таблицу events_statements_history_long. Этот шаг аналогичен запуску SHOW PROFILES для определения Query_ID. Следующий запрос даст результат, аналогичный SHOW PROFILES:

    mysql> SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
           FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%10001%';
    +----------+----------+--------------------------------------------------------+
    | event_id | duration | sql_text                                               |
    +----------+----------+--------------------------------------------------------+
    |       31 | 0.028310 | SELECT * FROM employees.employees WHERE emp_no = 10001 |
    +----------+----------+--------------------------------------------------------+
    
  6. Запросите таблицу events_stages_history_long, чтобы получить события этапов оператора. Этапы связаны с операторами с помощью вложенности событий. Каждая запись события этапа имеет столбец NESTING_EVENT_ID, который содержит EVENT_ID родительского оператора.

    mysql> SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
           FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=31;
    +--------------------------------+----------+
    | Stage                          | Duration |
    +--------------------------------+----------+
    | stage/sql/starting             | 0.000080 |
    | stage/sql/checking permissions | 0.000005 |
    | stage/sql/Opening tables       | 0.027759 |
    | stage/sql/init                 | 0.000052 |
    | stage/sql/System lock          | 0.000009 |
    | stage/sql/optimizing           | 0.000006 |
    | stage/sql/statistics           | 0.000082 |
    | stage/sql/preparing            | 0.000008 |
    | stage/sql/executing            | 0.000000 |
    | stage/sql/Sending data         | 0.000017 |
    | stage/sql/end                  | 0.000001 |
    | stage/sql/query end            | 0.000004 |
    | stage/sql/closing tables       | 0.000006 |
    | stage/sql/freeing items        | 0.000272 |
    | stage/sql/cleaning up          | 0.000001 |
    +--------------------------------+----------+
    

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

Spec-Zone.ru

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