Compartir tecnología

Descripción de seguimiento del servidor del estado de la sesión del cliente en MySQL

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.

1 Propósito del rastreador de estado de sesión

Los rastreadores de estado de sesión sirven para los siguientes propósitos:

  • para facilitar la migración de sesiones.
  • Facilita el cambio de transacciones.

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:

  1. READ ONLY
  2. READ WRITE
  3. ISOLATION LEVEL
  4. WITH CONSISTENT SNAPSHOT

2 rastreadores de estado de sesión disponibles

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:

  • Esquema predeterminado (base de datos).
  • Valores específicos de la sesión para variables del sistema.
  • Variables definidas por el usuario.
  • Forma temporal.
  • Discurso preparado.

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.

Compatibilidad con el rastreador de estado de sesión de 3 C API

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:

  • mysql_session_track_get_first() obtiene la primera parte de la información de cambio de estado recibida del servidor.
  • mysql_session_track_get_next() obtiene cualquier información de cambio de estado restante recibida del servidor. Después de una llamada exitosa a mysql_session_track_get_first(), esta función se llama repetidamente siempre que se devuelva el éxito.

Compatibilidad con el rastreador de estado de sesión de 4 conjuntos de pruebas

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:

  1. DROP TABLE IF EXISTS test.t1;
  2. CREATE TABLE test.t1 (i INT, f FLOAT);
  3. --enable_session_track_info
  4. SET @@SESSION.session_track_schema=ON;
  5. SET @@SESSION.session_track_system_variables='*';
  6. SET @@SESSION.session_track_state_change=ON;
  7. USE information_schema;
  8. SET NAMES 'utf8mb4';
  9. SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
  10. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  11. SET TRANSACTION READ WRITE;
  12. START TRANSACTION;
  13. SELECT 1;
  14. INSERT INTO test.t1 () VALUES();
  15. INSERT INTO test.t1 () VALUES(1, RAND());
  16. COMMIT;

Ejecute el script de la siguiente manera para ver la información proporcionada por los rastreadores habilitados. .

  1. $> mysqltest < testscript
  2. DROP TABLE IF EXISTS test.t1;
  3. CREATE TABLE test.t1 (i INT, f FLOAT);
  4. SET @@SESSION.session_track_schema=ON;
  5. SET @@SESSION.session_track_system_variables='*';
  6. -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
  7. -- session_track_system_variables
  8. -- *
  9. SET @@SESSION.session_track_state_change=ON;
  10. -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
  11. -- session_track_state_change
  12. -- ON
  13. USE information_schema;
  14. -- Tracker : SESSION_TRACK_SCHEMA
  15. -- information_schema
  16. -- Tracker : SESSION_TRACK_STATE_CHANGE
  17. -- 1
  18. SET NAMES 'utf8mb4';
  19. -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
  20. -- character_set_client
  21. -- utf8mb4
  22. -- character_set_connection
  23. -- utf8mb4
  24. -- character_set_results
  25. -- utf8mb4
  26. -- Tracker : SESSION_TRACK_STATE_CHANGE
  27. -- 1
  28. SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
  29. -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
  30. -- session_track_transaction_info
  31. -- CHARACTERISTICS
  32. -- Tracker : SESSION_TRACK_STATE_CHANGE
  33. -- 1
  34. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  35. --
  36. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  37. -- ________
  38. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  39. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  40. -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  41. SET TRANSACTION READ WRITE;
  42. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  43. -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ WRITE;
  44. START TRANSACTION;
  45. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  46. -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION READ WRITE;
  47. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  48. -- T_______
  49. SELECT 1;
  50. 1
  51. 1
  52. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  53. -- T_____S_
  54. INSERT INTO test.t1 () VALUES();
  55. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  56. -- T___W_S_
  57. INSERT INTO test.t1 () VALUES(1, RAND());
  58. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  59. -- T___WsS_
  60. COMMIT;
  61. -- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
  62. --
  63. -- Tracker : SESSION_TRACK_TRANSACTION_STATE
  64. -- ________
  65. 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.