Spec-Zone.ru › MySQL 9.2

29.12.7 Таблицы схем производительности для транзакций

  • 29.12.7.1 Таблица events_transactions_current
  • 29.12.7.2 Таблица events_transactions_history
  • 29.12.7.3 Таблица events_transactions_history_long

Схема производительности отслеживает транзакции. В иерархии событий, события ожидания вложены в события этапов, которые вложены в события операторов, которые вложены в события транзакций.

Эти таблицы хранят события транзакций:

  • events_transactions_current: текущее событие транзакции для каждого потока.

  • events_transactions_history: самые последние события транзакций, завершенные по каждому потоку.

  • events_transactions_history_long: самые последние события транзакций, завершенные глобально (по всем потокам).

В следующих разделах описываются таблицы событий транзакций. Также существуют сводные таблицы, которые агрегируют информацию о событиях транзакций; см. Раздел 29.12.20.5, “Таблицы сводки транзакций”.

Для получения дополнительной информации о взаимосвязи трех таблиц событий транзакций см. Раздел 29.9, “Таблицы схем производительности для текущих и исторических событий”.

  • Настройка сбора событий транзакций

  • Границы транзакций

  • Измерение транзакций

  • Транзакции и вложенные события

  • Транзакции и хранимые программы

  • Транзакции и точки сохранения

  • Транзакции и ошибки

Настройка сбора событий транзакций

Для управления сбором событий транзакций, установите состояние соответствующих инструментов и потребителей:

  • Таблица setup_instruments содержит инструмент под названием transaction. Используйте этот инструмент для включения или отключения сбора отдельных классов событий транзакций.

  • Таблица setup_consumers содержит значения потребителей с именами, соответствующими именам текущих и исторических таблиц событий транзакций. Используйте этих потребителей для фильтрации сбора событий транзакций.

Инструмент transaction и потребители транзакций events_transactions_current и events_transactions_history включены по умолчанию:

mysql> SELECT NAME, ENABLED, TIMED
       FROM performance_schema.setup_instruments
       WHERE NAME = 'transaction';
+-------------+---------+-------+
| NAME        | ENABLED | TIMED |
+-------------+---------+-------+
| transaction | YES     | YES   |
+-------------+---------+-------+
mysql> SELECT *
       FROM performance_schema.setup_consumers
       WHERE NAME LIKE 'events_transactions%';
+----------------------------------+---------+
| NAME                             | ENABLED |
+----------------------------------+---------+
| events_transactions_current      | YES     |
| events_transactions_history      | YES     |
| events_transactions_history_long | NO      |
+----------------------------------+---------+

Для управления сбором событий транзакций при запуске сервера, используйте такие строки в файле my.cnf:

  • Включить:

    [mysqld]
    performance-schema-instrument='transaction=ON'
    performance-schema-consumer-events-transactions-current=ON
    performance-schema-consumer-events-transactions-history=ON
    performance-schema-consumer-events-transactions-history-long=ON
    
  • Отключить:

    [mysqld]
    performance-schema-instrument='transaction=OFF'
    performance-schema-consumer-events-transactions-current=OFF
    performance-schema-consumer-events-transactions-history=OFF
    performance-schema-consumer-events-transactions-history-long=OFF
    

Для управления сбором событий транзакций во время выполнения, обновите таблицы setup_instruments и setup_consumers:

  • Включить:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME = 'transaction';
    
    UPDATE performance_schema.setup_consumers
    SET ENABLED = 'YES'
    WHERE NAME LIKE 'events_transactions%';
    
  • Отключить:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'NO', TIMED = 'NO'
    WHERE NAME = 'transaction';
    
    UPDATE performance_schema.setup_consumers
    SET ENABLED = 'NO'
    WHERE NAME LIKE 'events_transactions%';
    

Для сбора событий транзакций только для определенных таблиц событий транзакций, включите инструмент transaction, но только потребителей транзакций, соответствующих требуемым таблицам.

Для дополнительной информации о настройке сбора событий, см. Раздел 29.3, “Настройка схем производительности при запуске” и Раздел 29.4, “Настройка схем производительности во время выполнения”.

Границы транзакций

В MySQL Server транзакции начинаются явно с этих операторов:

START TRANSACTION | BEGIN | XA START | XA BEGIN

Транзакции также начинаются неявно. Например, когда системная переменная autocommit включена, начало каждого оператора запускает новую транзакцию.

Когда autocommit отключена, первый оператор после завершенной транзакции помечает начало новой транзакции. Последующие операторы являются частью транзакции до ее подтверждения.

Транзакции явно завершаются этими операторами:

COMMIT | ROLLBACK | XA COMMIT | XA ROLLBACK

Транзакции также завершаются неявно, выполнением операторов DDL, операторов блокировки и операторов администрирования сервера.

В последующем обсуждении ссылки на START TRANSACTION также относятся к BEGIN, XA START и XA BEGIN. Аналогично, ссылки на COMMIT и ROLLBACK относятся к XA COMMIT и XA ROLLBACK соответственно.

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

  • Для явно начатой транзакции, событие транзакции начинается во время обработки оператора START TRANSACTION.

  • Для неявно начатой транзакции, событие транзакции начинается с первого оператора, использующего транзакционный движок после завершения предыдущей транзакции.

  • Для любой транзакции, завершенной явно или неявно, событие транзакции завершается, когда сервер выходит из активного состояния транзакции во время обработки COMMIT или ROLLBACK.

Существуют тонкие последствия этого подхода:

  • События транзакций в схеме производительности не полностью включают события операторов, связанные с соответствующими операторами START TRANSACTION, COMMIT или ROLLBACK. Существует незначительная временная перекрываемость между событием транзакции и этими операторами.

  • Операторы, работающие с нетранзакционными движками, не влияют на состояние транзакции соединения. Для неявных транзакций событие транзакции начинается с первого оператора, использующего транзакционный движок. Это означает, что операторы, работающие исключительно с нетранзакционными таблицами, игнорируются, даже после START TRANSACTION.

Для иллюстрации рассмотрим следующий сценарий:

1. SET autocommit = OFF;
2. CREATE TABLE t1 (a INT) ENGINE = InnoDB;
3. START TRANSACTION;                       -- Transaction 1 START
4. INSERT INTO t1 VALUES (1), (2), (3);
5. CREATE TABLE t2 (a INT) ENGINE = MyISAM; -- Transaction 1 COMMIT
                                            -- (implicit; DDL forces commit)
6. INSERT INTO t2 VALUES (1), (2), (3);     -- Update nontransactional table
7. UPDATE t2 SET a = a + 1;                 -- ... and again
8. INSERT INTO t1 VALUES (4), (5), (6);     -- Write to transactional table
                                            -- Transaction 2 START (implicit)
9. COMMIT;                                  -- Transaction 2 COMMIT

С точки зрения сервера, транзакция 1 завершается, когда создается таблица t2. Транзакция 2 не начинается до тех пор, пока не будет обработана транзакционная таблица, несмотря на промежуточные обновления нетранзакционных таблиц.

С точки зрения Performance Schema, транзакция 2 начинается, когда сервер переходит в активное состояние транзакции. Заявления 6 и 7 не включены в границы транзакции 2, что согласуется с тем, как сервер записывает транзакции в двоичный журнал.

Инструментарий транзакций

Транзакции определяются тремя атрибутами:

  • Режим доступа (только чтение, чтение и запись)

  • Уровень изоляции (SERIALIZABLE, REPEATABLE READ и так далее)

  • Неявный (autocommit включен) или явный (autocommit выключен)

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

Для выборочного изучения истории транзакций используйте атрибуты столбцов в таблицах событий транзакций: ACCESS_MODE, ISOLATION_LEVEL и AUTOCOMMIT.

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

Транзакции и вложенные события

Родительское событие транзакции — это событие, которое инициировало транзакцию. Для явно начатой транзакции это включает в себя инструкции START TRANSACTION и COMMIT AND CHAIN. Для неявной транзакции — это первая инструкция, использующая транзакционный движок после завершения предыдущей транзакции.

В общем случае, транзакция является родительским уровнем для всех событий, инициированных во время транзакции, включая инструкции, которые явно завершают транзакцию, такие как COMMIT и ROLLBACK. Исключение составляют инструкции, которые неявным образом завершают транзакцию, например, DDL-инструкции, в этом случае текущая транзакция должна быть подтверждена перед выполнением новой инструкции.

Транзакции и хранимые программы

Транзакции и события хранимых программ связаны следующим образом:

  • Хранимые процедуры

    Хранимые процедуры работают независимо от транзакций. Хранимая процедура может быть начата внутри транзакции, а транзакция может быть начата или завершена внутри хранимой процедуры. Если она вызывается внутри транзакции, хранимая процедура может выполнять инструкции, которые заставляют родительскую транзакцию подтвердиться, а затем начать новую транзакцию.

    Если хранимая процедура запускается внутри транзакции, эта транзакция является родителем события хранимой процедуры.

    Если транзакция запускается хранимой процедурой, хранимая процедура является родителем события транзакции.

  • Хранимые функции

    Хранимые функции ограничены в возможности вызывать явное или неявное подтверждение или откат. События хранимых функций могут находиться внутри родительского события транзакции.

  • Триггеры

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

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

  • Планируемые события

    Выполнение инструкций в теле планируемого события происходит в новом соединении. Вложение планируемого события в родительскую транзакцию неприменимо.

Транзакции и точки сохранения

Инструкции точки сохранения регистрируются как отдельные события инструкций. События транзакций включают отдельные счетчики для SAVEPOINT, ROLLBACK TO SAVEPOINT и RELEASE SAVEPOINT инструкций, выданных в рамках транзакции.

Транзакции и ошибки

Ошибки и предупреждения, возникающие внутри транзакции, записываются в события инструкций, но не в соответствующее событие транзакции. Это включает ошибки и предупреждения, специфичные для транзакции, такие как откат по нетранзакционной таблице или ошибки согласованности GTID.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/performance-schema-transaction-tables.html

Spec-Zone.ru

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