minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
O servidor MySQL implementa vários rastreadores de estado de sessão. Os clientes podem ativar esses rastreadores para receber notificações de alterações no estado da sessão.
Os rastreadores de estado de sessão atendem aos seguintes propósitos:
O mecanismo rastreador fornece uma maneira para os conectores MySQL e aplicativos clientes determinarem se algum contexto de sessão está disponível para permitir a migração de sessão de um servidor para outro. (Para alterar sessões em um ambiente com balanceamento de carga, é necessário detectar se existe um estado de sessão que precisa ser levado em consideração ao decidir se uma mudança é possível.)
O mecanismo rastreador permite que os aplicativos saibam quando as transações podem ser movidas de uma sessão para outra. O rastreamento do status da transação permite isso, o que é útil para aplicativos que desejam mover transações de um servidor ocupado para um servidor menos carregado. Por exemplo, um conector de balanceamento de carga que gerencia um conjunto de conexões de clientes pode mover transações entre sessões disponíveis no conjunto.
No entanto, a troca de sessão não pode ocorrer em nenhum momento. Se a sessão estiver no meio de uma transação que concluiu uma leitura ou gravação, mudar para uma sessão diferente significa que a transação na sessão original será revertida. Uma troca de sessão só pode ocorrer quando nenhuma operação de leitura ou gravação tiver sido executada na transação.
Exemplos de transações que podem mudar razoavelmente:
Além de entender o status da transação, você também pode entender as características da transação para poder usar as mesmas características quando a transação for movida para uma sessão diferente. As seguintes características estão associadas a isso:
- READ ONLY
- READ WRITE
- ISOLATION LEVEL
- WITH CONSISTENT SNAPSHOT
Para dar suporte às atividades de rastreamento de sessão, podem ser fornecidas notificações para os seguintes tipos de informações de estado de sessão do cliente:
(1) Alterações nestas propriedades do estado da sessão do cliente:
A variável de sistema session_track_state_change controla esse rastreador.
(2) Mude para o nome do esquema padrão. A variável de sistema session_track_schema controla esse rastreador.
(3) Altere o valor da sessão da variável do sistema. A variável de sistema session_track_system_variables controla esse rastreador. A permissão SENSITIVE_VARIABLES_OBSERVER é necessária para rastrear alterações nos valores de variáveis sensíveis do sistema.
(4) GTID disponível. A variável de sistema session_track_gtids controla este rastreador.
(5) Informações sobre status e características da transação. A variável de sistema session_track_transaction_info controla esse rastreador.
Essas variáveis de sistema permitem controlar quais notificações de alteração ocorrem, mas não fornecem uma maneira de acessar informações de notificação. A notificação ocorre dentro do protocolo cliente/servidor MySQL, que inclui informações do rastreador em pacotes OK para detectar alterações no estado da sessão.
Para permitir que aplicativos clientes extraiam informações de mudança de estado de pacotes OK retornados pelo servidor, a API C do MySQL fornece um par de funções:
O programa mysqltest possui os comandos disable_session_track_info e enable_sessionutrack_ininfo para controlar se ocorrem notificações do rastreador de sessão. Você pode usar esses comandos para visualizar notificações produzidas por instruções SQL na linha de comando. Suponha que um arquivo testscript contenha o seguinte 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;
Execute o script da seguinte maneira para ver as informações fornecidas pelos 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 da instrução START TRANSACTION, execute duas instruções SET TRANSACTION para definir o nível de isolamento e as características do modo de acesso para a próxima transação. O valor SESSION_TRACK_TRANSACTION_CHARACTERISTICS indica o próximo valor de transação que foi definido.
Após uma instrução COMMIT que finaliza uma transação, o valor SESSION_TRACK_transaction_CHARACTERISTICS é relatado como vazio. Isso significa que as próximas propriedades da transação que foram definidas antes do início da transação foram redefinidas e os padrões da sessão foram aplicados. Para rastrear alterações nesses padrões de sessão, rastreie os valores de sessão das variáveis de sistema transaction_inisolation e transaction_read_only.
Para visualizar informações sobre GTIDs, ative o rastreador SESSION_TRACK_GTIDs usando a variável de sistema SESSION_TRACK_GTIDs.