Spec-Zone.ru › MySQL 8.4

7.1.18 Отслеживание состояния сеанса сервером

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

  • Использование отслеживателей состояния сеанса

  • Доступные отслеживатели состояния сеанса

  • Поддержка отслеживателей состояния сеанса C API

  • Поддержка отслеживателей состояния сеанса набора тестов

Использование отслеживателей состояния сеанса

Отслеживатели состояния сеанса используются, например:

  • Для облегчения миграции сеансов.

  • Для облегчения переключения транзакций.

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

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

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

Примеры ситуаций, когда транзакции можно разумно переключать:

  • Сразу после START TRANSACTION

  • После COMMIT AND CHAIN

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

READ ONLY
READ WRITE
ISOLATION LEVEL
WITH CONSISTENT SNAPSHOT

Доступные отслеживатели состояния сеанса

Для поддержки операций отслеживания сеанса доступны уведомления о таких типах информации о состоянии клиентского сеанса:

  • Изменения следующих атрибутов состояния клиентского сеанса:

    • Схема по умолчанию (база данных).

    • Значения системных переменных, специфичные для сеанса.

    • Переменные, определенные пользователем.

    • Временные таблицы.

    • Подготовленные запросы.

    Переменная системы session_track_state_change управляет этим отслеживателем.

  • Изменения имени схемы по умолчанию. Переменная системы session_track_schema управляет этим отслеживателем.

  • Изменения значений системных переменных в сеансе. Переменная системы session_track_system_variables управляет этим отслеживателем. Для отслеживания изменений значений чувствительных системных переменных требуется привилегия SENSITIVE_VARIABLES_OBSERVER.

  • Доступные GTID. Переменная системы session_track_gtids управляет этим отслеживателем.

  • Информация о состоянии и характеристиках транзакции. Переменная системы session_track_transaction_info управляет этим отслеживателем.

Описание переменных системы, связанных с отслеживанием, см. в разделе 7.1.8, «Server System Variables». Эти переменные позволяют управлять уведомлениями о изменениях, но не предоставляют способ доступа к информации об уведомлениях. Уведомления передаются в протоколе MySQL клиент/сервер, который включает информацию об отслеживании в пакетах OK, чтобы можно было обнаружить изменения в состоянии сеанса.

Поддержка отслеживателей состояния сеанса C API

Чтобы клиентские приложения могли извлекать информацию об изменениях состояния из пакетов OK, возвращаемых сервером, C API MySQL предоставляет пару функций:

  • извлекает первую часть информации об изменениях состояния, полученную от сервера. См. .

  • извлекает любую оставшуюся информацию об изменениях состояния, полученную от сервера. После успешного вызова несколько раз вызывайте эту функцию, пока она не вернет ошибку. См. .

Поддержка отслеживателей состояния сеанса набора тестов

Программа mysqltest имеет команды disable_session_track_info и enable_session_track_info, которые управляют тем, происходят ли уведомления отслеживания состояния сеанса. Вы можете использовать эти команды, чтобы посмотреть с командной строки, какие уведомления генерируют SQL-запросы. Предположим, что файл testscript содержит следующий скрипт mysqltest:

DROP TABLE IF EXISTS test.t1;
CREATE TABLE test.t1 (i INT, f FLOAT);
--enable_session_track_info
SET @@SESSION.session_track_schema=ON;
SET @@SESSION.session_track_system_variables='*';
SET @@SESSION.session_track_state_change=ON;
USE information_schema;
SET NAMES 'utf8mb4';
SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ WRITE;
START TRANSACTION;
SELECT 1;
INSERT INTO test.t1 () VALUES();
INSERT INTO test.t1 () VALUES(1, RAND());
COMMIT;

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

$> mysqltest < testscript
DROP TABLE IF EXISTS test.t1;
CREATE TABLE test.t1 (i INT, f FLOAT);
SET @@SESSION.session_track_schema=ON;
SET @@SESSION.session_track_system_variables='*';
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
-- session_track_system_variables
-- *

SET @@SESSION.session_track_state_change=ON;
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
-- session_track_state_change
-- ON

USE information_schema;
-- Tracker : SESSION_TRACK_SCHEMA
-- information_schema

-- Tracker : SESSION_TRACK_STATE_CHANGE
-- 1

SET NAMES 'utf8mb4';
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
-- character_set_client
-- utf8mb4
-- character_set_connection
-- utf8mb4
-- character_set_results
-- utf8mb4

-- Tracker : SESSION_TRACK_STATE_CHANGE
-- 1

SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
-- session_track_transaction_info
-- CHARACTERISTICS

-- Tracker : SESSION_TRACK_STATE_CHANGE
-- 1

-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
--

-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- ________

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET TRANSACTION READ WRITE;
-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ WRITE;

START TRANSACTION;
-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION READ WRITE;

-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- T_______

SELECT 1;
1
1
-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- T_____S_

INSERT INTO test.t1 () VALUES();
-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- T___W_S_

INSERT INTO test.t1 () VALUES(1, RAND());
-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- T___WsS_

COMMIT;
-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
--

-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- ________

ok

Перед оператором START TRANSACTION выполняются две команды SET TRANSACTION, которые устанавливают уровень изоляции и характеристики доступа для следующей транзакции. Значение SESSION_TRACK_TRANSACTION_CHARACTERISTICS указывает эти значения следующей транзакции, которые были установлены.

После оператора COMMIT, завершающего транзакцию, значение SESSION_TRACK_TRANSACTION_CHARACTERISTICS отображается как пустое. Это указывает на то, что характеристики следующей транзакции, которые были установлены перед началом транзакции, были сброшены, и применяются значения по умолчанию сеанса. Чтобы отслеживать изменения этих значений по умолчанию сеанса, отслеживайте значения переменных системы transaction_isolation и transaction_read_only.

Чтобы увидеть информацию о GTID, включите отслеживатель SESSION_TRACK_GTIDS, используя переменную системы session_track_gtids.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/session-state-tracking.html

Spec-Zone.ru

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