Condivisione della tecnologia

Descrizione della traccia del server dello stato della sessione client in MySQL

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Il server MySQL implementa diversi tracker dello stato della sessione. I client possono abilitare questi tracker per ricevere notifiche sulle modifiche dello stato della sessione.

1 Scopo del monitoraggio dello stato della sessione

I tracker dello stato della sessione hanno i seguenti scopi:

  • per facilitare la migrazione della sessione.
  • Facilita il cambio di transazione.

Il meccanismo di tracciamento fornisce ai connettori MySQL e alle applicazioni client un modo per determinare se un contesto di sessione è disponibile per consentire la migrazione della sessione da un server a un altro. (Per modificare le sessioni in un ambiente con carico bilanciato, è necessario rilevare se esiste uno stato di sessione che deve essere preso in considerazione quando si decide se è possibile un cambiamento.)

Il meccanismo di tracciamento consente alle applicazioni di sapere quando le transazioni possono essere spostate da una sessione all'altra. Il monitoraggio dello stato delle transazioni consente ciò, il che è utile per le applicazioni che desiderano spostare le transazioni da un server occupato a un server meno caricato. Ad esempio, un connettore di bilanciamento del carico che gestisce un pool di connessioni client può spostare le transazioni tra le sessioni disponibili nel pool.

Tuttavia, il cambio di sessione non può avvenire in qualsiasi momento. Se la sessione è nel mezzo di una transazione che ha completato una lettura o una scrittura, il passaggio a una sessione diversa significa che viene eseguito il rollback della transazione sulla sessione originale. Un cambio di sessione può verificarsi solo quando non sono state eseguite operazioni di lettura o scrittura all'interno della transazione.

Esempi di transazioni che potrebbero ragionevolmente cambiare:

Oltre a comprendere lo stato della transazione, puoi anche comprendere le caratteristiche della transazione in modo da poter utilizzare le stesse caratteristiche quando la transazione viene spostata in una sessione diversa. A questo sono associate le seguenti caratteristiche:

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

2 Tracker dello stato della sessione disponibili

Per supportare le attività di tracciamento delle sessioni, è possibile fornire notifiche per i seguenti tipi di informazioni sullo stato della sessione client:

(1) Modifiche a queste proprietà dello stato della sessione client:

  • Schema predefinito (database).
  • Valori specifici della sessione per le variabili di sistema.
  • Variabili definite dall'utente.
  • Forma temporanea.
  • Discorso preparato.

La variabile di sistema session_track_state_change controlla questo tracker.

(2) Modificare il nome dello schema predefinito. La variabile di sistema session_track_schema controlla questo tracker.

(3) Modificare il valore della sessione della variabile di sistema. La variabile di sistema session_track_system_variables controlla questo tracker. L'autorizzazione SENSITIVE_VARIABLES_OBSERVER è necessaria per tenere traccia delle modifiche nei valori delle variabili di sistema sensibili.

(4) GTID disponibile. La variabile di sistema session_track_gtids controlla questo tracker.

(5) Informazioni sullo stato e sulle caratteristiche della transazione. La variabile di sistema session_track_transaction_info controlla questo tracker.

Queste variabili di sistema consentono di controllare quali notifiche di modifica si verificano, ma non forniscono un modo per accedere alle informazioni di notifica. La notifica avviene all'interno del protocollo client/server MySQL, che include informazioni di tracciamento nei pacchetti OK per rilevare i cambiamenti nello stato della sessione.

3 Supporto per il tracker dello stato della sessione API C

Per consentire alle applicazioni client di estrarre informazioni sul cambiamento di stato dai pacchetti OK restituiti dal server, l'API MySQL C fornisce una coppia di funzioni:

  • mysql_session_track_get_first() ottiene la prima parte delle informazioni sul cambiamento di stato ricevute dal server.
  • mysql_session_track_get_next() ottiene tutte le informazioni rimanenti sulla modifica dello stato ricevute dal server. Dopo una chiamata riuscita a mysql_session_track_get_first(), questa funzione viene chiamata ripetutamente finché viene restituito il successo.

4 supporto per il tracker dello stato della sessione della suite di test

Il programma mysqltest dispone dei comandi aware_session_track_info e Enable_sessionutrack_ininfo per controllare se si verificano le notifiche del tracker della sessione. È possibile utilizzare questi comandi per visualizzare le notifiche prodotte dalle istruzioni SQL dalla riga di comando. Supponiamo che un file testscript contenga il seguente 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;

Eseguire lo script come segue per visualizzare le informazioni fornite dai tracker abilitati. .

  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

Prima dell'istruzione START TRANSACTION, eseguire due istruzioni SET TRANSACTION per impostare il livello di isolamento e le caratteristiche della modalità di accesso per la transazione successiva. Il valore SESSION_TRACK_TRANSACTION_CHARACTERISTICS indica il valore della transazione successiva che è stato impostato.

Dopo un'istruzione COMMIT che termina una transazione, il valore SESSION_TRACK_transaction_CHARACTERISTICS viene segnalato come vuoto. Ciò significa che le proprietà della transazione successiva impostate prima dell'avvio della transazione sono state reimpostate e vengono applicate le impostazioni predefinite della sessione. Per tenere traccia delle modifiche a queste impostazioni predefinite della sessione, tenere traccia dei valori di sessione delle variabili di sistema Transaction_inisolation e Transaction_read_only.

Per visualizzare le informazioni sui GTID, abilita il tracker SESSION_TRACK_GTIDs utilizzando la variabile di sistema SESSION_TRACK_GTIDs.