le mie informazioni di contatto
Posta[email protected]
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.
I tracker dello stato della sessione hanno i seguenti scopi:
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:
- READ ONLY
- READ WRITE
- ISOLATION LEVEL
- WITH CONSISTENT SNAPSHOT
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:
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.
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:
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:
- 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;
Eseguire lo script come segue per visualizzare le informazioni fornite dai tracker abilitati. .
- $> 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
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.