Mi información de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
El servidor MySQL implementa varios rastreadores de estado de sesión. Los clientes pueden habilitar estos rastreadores para recibir notificaciones de cambios en el estado de la sesión.
Los rastreadores de estado de sesión sirven para los siguientes propósitos:
El mecanismo de seguimiento proporciona una manera para que los conectores MySQL y las aplicaciones cliente determinen si algún contexto de sesión está disponible para permitir la migración de sesiones de un servidor a otro. (Para cambiar de sesión en un entorno con equilibrio de carga, es necesario detectar si hay un estado de sesión que deba tenerse en cuenta al decidir si es posible realizar un cambio).
El mecanismo de seguimiento permite a las aplicaciones saber cuándo las transacciones se pueden mover de una sesión a otra. El seguimiento del estado de las transacciones permite esto, lo cual es útil para aplicaciones que desean mover transacciones de un servidor ocupado a un servidor menos cargado. Por ejemplo, un conector de equilibrio de carga que gestiona un grupo de conexiones de clientes puede mover transacciones entre sesiones disponibles en el grupo.
Sin embargo, el cambio de sesión no puede ocurrir en ningún momento. Si la sesión se encuentra en medio de una transacción que ha completado una lectura o escritura, cambiar a una sesión diferente significa que la transacción en la sesión original se revierte. Un cambio de sesión solo puede ocurrir cuando no se han realizado operaciones de lectura o escritura dentro de la transacción.
Ejemplos de transacciones que razonablemente podrían cambiar:
Además de comprender el estado de la transacción, también puede comprender las características de la transacción para poder usar las mismas características cuando la transacción se mueve a una sesión diferente. Las siguientes características están asociadas a esto:
- READ ONLY
- READ WRITE
- ISOLATION LEVEL
- WITH CONSISTENT SNAPSHOT
Para respaldar las actividades de seguimiento de sesiones, se pueden proporcionar notificaciones para los siguientes tipos de información del estado de la sesión del cliente:
(1) Cambios en estas propiedades del estado de la sesión del cliente:
La variable del sistema session_track_state_change controla este rastreador.
(2) Cambie al nombre del esquema predeterminado. La variable de sistema session_track_schema controla este rastreador.
(3) Cambie el valor de sesión de la variable del sistema. La variable de sistema session_track_system_variables controla este rastreador. Se requiere el permiso SENSITIVE_VARIABLES_OBSERVER para rastrear cambios en los valores de variables sensibles del sistema.
(4) GTID disponible. La variable de sistema session_track_gtids controla este rastreador.
(5) Información sobre el estado y características de la transacción. La variable de sistema session_track_transaction_info controla este rastreador.
Estas variables del sistema permiten controlar qué notificaciones de cambios ocurren, pero no proporcionan una manera de acceder a la información de las notificaciones. La notificación se produce dentro del protocolo cliente/servidor MySQL, que incluye información del rastreador en paquetes OK para detectar cambios en el estado de la sesión.
Para permitir que las aplicaciones cliente extraigan información de cambio de estado de los paquetes OK devueltos por el servidor, la API MySQL C proporciona un par de funciones:
El programa mysqltest tiene los comandos enable_session_track_info y enable_sessionutrack_ininfo para controlar si se producen notificaciones del rastreador de sesiones. Puede utilizar estos comandos para ver las notificaciones generadas por declaraciones SQL desde la línea de comandos. Supongamos que un archivo testscript contiene el siguiente script 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;
Ejecute el script de la siguiente manera para ver la información proporcionada por los rastreadores habilitados. .
- $> 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
Antes de la instrucción START TRANSACTION, ejecute dos instrucciones SET TRANSACTION para establecer el nivel de aislamiento y las características del modo de acceso para la siguiente transacción. El valor SESSION_TRACK_TRANSACTION_CHARACTERISTICS indica el siguiente valor de transacción que se ha establecido.
Después de una declaración COMMIT que finaliza una transacción, el valor SESSION_TRACK_transaction_CHARACTERISTICS se informa como vacío. Esto significa que las siguientes propiedades de transacción que se establecieron antes de que comenzara la transacción se han restablecido y se aplican los valores predeterminados de la sesión. Para realizar un seguimiento de los cambios en estos valores predeterminados de sesión, realice un seguimiento de los valores de sesión de las variables del sistema transaction_inisolation y transaction_read_only.
Para ver información sobre los GTID, habilite el rastreador SESSION_TRACK_GTIDs utilizando la variable del sistema SESSION_TRACK_GTIDs.