моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Сервер MySQL реализует несколько средств отслеживания состояния сеанса. Клиенты могут включить эти трекеры для получения уведомлений об изменениях состояния сеанса.
Трекеры состояния сеанса служат следующим целям:
Механизм отслеживания предоставляет соединителям MySQL и клиентским приложениям возможность определить, доступен ли какой-либо контекст сеанса, чтобы разрешить миграцию сеанса с одного сервера на другой. (Чтобы изменить сеансы в среде со сбалансированной нагрузкой, необходимо определить, существует ли состояние сеанса, которое необходимо учитывать при принятии решения о возможности переключения.)
Механизм отслеживания позволяет приложениям знать, когда транзакции можно переместить из одного сеанса в другой. Отслеживание статуса транзакций позволяет это сделать, что полезно для приложений, которым необходимо переместить транзакции с занятого сервера на менее загруженный сервер. Например, соединитель балансировки нагрузки, который управляет пулом клиентских подключений, может перемещать транзакции между доступными сеансами в пуле.
Однако переключение сеанса не может произойти в любой момент. Если сеанс находится в середине транзакции, завершившей чтение или запись, переключение на другой сеанс означает, что транзакция в исходном сеансе откатывается. Переключение сеанса может произойти только в том случае, если в рамках транзакции не выполнялись операции чтения или записи.
Примеры транзакций, которые могут быть разумно переключены:
Помимо понимания статуса транзакции, вы также можете понять характеристики транзакции, чтобы использовать те же характеристики, когда транзакция перемещается в другой сеанс. С этим связаны следующие характеристики:
- READ ONLY
- READ WRITE
- ISOLATION LEVEL
- WITH CONSISTENT SNAPSHOT
Для поддержки действий по отслеживанию сеансов уведомления могут предоставляться для следующих типов информации о состоянии сеанса клиента:
(1) Изменения в этих свойствах состояния сеанса клиента:
Системная переменная session_track_state_change управляет этим трекером.
(2) Измените имя схемы по умолчанию. Системная переменная session_track_schema управляет этим трекером.
(3) Измените значение сеанса системной переменной. Системная переменная session_track_system_variables управляет этим трекером. Разрешение SENSITIVE_VARIABLES_OBSERVER необходимо для отслеживания изменений значений конфиденциальных системных переменных.
(4) Доступный GTID. Системная переменная session_track_gtids управляет этим трекером.
(5) Информация о статусе и характеристиках транзакции. Системная переменная session_track_transaction_info управляет этим трекером.
Эти системные переменные позволяют контролировать появление уведомлений об изменениях, но не обеспечивают доступ к информации об уведомлениях. Уведомление происходит в рамках протокола клиента/сервера MySQL, который включает информацию трекера в пакеты OK для обнаружения изменений в состоянии сеанса.
Чтобы позволить клиентским приложениям извлекать информацию об изменении состояния из пакетов OK, возвращаемых сервером, MySQL C API предоставляет пару функций:
Программа mysqltest имеет команды Disable_session_track_info и Enable_sessionutrack_ininfo для управления появлением уведомлений от средства отслеживания сеансов. Вы можете использовать эти команды для просмотра уведомлений, созданных операторами 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;
Запустите сценарий следующим образом, чтобы просмотреть информацию, предоставляемую включенными трекерами. .
- $> 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 сообщается как пустое. Это означает, что свойства следующей транзакции, которые были установлены до начала транзакции, сбрасываются и применяются значения сеанса по умолчанию. Чтобы отслеживать изменения в этих настройках сеанса по умолчанию, отслеживайте значения сеанса системных переменных транзакции_inisolation и транзакции_read_only.
Чтобы просмотреть информацию о GTIDs, включите трекер SESSION_TRACK_GTIDs с помощью системной переменной SESSION_TRACK_GTIDs.