Spec-Zone.ru › MySQL 5.7

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

Сервер 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.

  • Доступные GTID. Эта информация отслеживается переменной системы session_track_gtids.

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

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

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

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

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

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

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

Программа 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-5.7-en/session-state-tracking.html

Spec-Zone.ru

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