Loading...
MySQL 9.5 Reference Manual 9.5의 7.1.18 Server Tracking of Client Session State의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL 서버는 여러 세션 상태 추적기를 구현합니다. 클라이언트는 이 추적기들을 활성화하여 자신의 세션 상태 변경에 대한 알림을 받을 수 있습니다.
Session state tracker는 다음과 같은 용도로 사용됩니다:
세션 마이그레이션을 용이하게 하기 위해.
트랜잭션 스위칭을 용이하게 하기 위해.
추적 메커니즘은 MySQL 커넥터와 클라이언트 애플리케이션이 세션 마이그레이션을 위해 사용할 수 있는 세션 컨텍스트가 있는지 여부를 결정할 수 있는 수단을 제공합니다. (로드 밸런싱된 환경에서 세션을 변경하려면, 전환 가능 여부를 결정할 때 고려해야 할 세션 상태가 존재하는지 감지하는 것이 필요합니다.)
추적 메커니즘은 애플리케이션이 트랜잭션을 하나의 세션에서 다른 세션으로 언제 이동시킬 수 있는지 알 수 있게 합니다. 트랜잭션 상태 추적은 이를 가능하게 하며, 이는 바쁜 서버에서 비교적 부하가 적은 서버로 트랜잭션을 이동시키고자 할 수 있는 애플리케이션에 유용합니다. 예를 들어, 클라이언트 커넥션 풀을 관리하는 로드 밸런싱 커넥터는 풀 내 사용 가능한 세션 간에 트랜잭션을 이동시킬 수 있습니다.
그러나 세션 스위칭은 임의의 시점에 수행될 수는 없습니다. 만약 세션이, 읽기 또는 쓰기가 수행된 트랜잭션의 중간에 있다면, 다른 세션으로 전환하는 것은 원래 세션에서의 트랜잭션 롤백을 의미합니다. 세션 전환은 트랜잭션 내에서 아직 어떤 읽기나 쓰기도 수행되지 않은 경우에만 수행되어야 합니다.
트랜잭션을 합리적으로 전환할 수 있는 시점의 예:
트랜잭션 상태를 아는 것 외에도, 트랜잭션이 다른 세션으로 이동될 때 동일한 특성을 사용하기 위해 트랜잭션 특성을 아는 것이 유용합니다. 이 목적에 관련된 특성은 다음과 같습니다:
1READ ONLY 2READ WRITE 3ISOLATION LEVEL 4WITH CONSISTENT SNAPSHOT
세션 추적 활동을 지원하기 위해, 다음 유형의 클라이언트 세션 상태 정보에 대한 알림이 제공됩니다:
클라이언트 세션 상태의 다음 속성에 대한 변경:
기본 스키마(데이터베이스).
시스템 변수의 세션별 값.
사용자 정의 변수.
임시 테이블.
준비된 문장.
session_track_state_change
시스템 변수가 이 추적기를 제어합니다.
기본 스키마 이름 변경. session_track_schema 시스템
변수가 이 추적기를 제어합니다.
시스템 변수의 세션 값 변경. session_track_system_variables
시스템 변수가 이 추적기를 제어합니다.
SENSITIVE_VARIABLES_OBSERVER
권한이 민감한 시스템 변수 값의 변경을 추적하기 위해 필요합니다.
사용 가능한 GTID. session_track_gtids 시스템
변수가 이 추적기를 제어합니다.
트랜잭션 상태 및 특성에 대한 정보.
session_track_transaction_info
시스템 변수가 이 추적기를 제어합니다.
추적기 관련 시스템 변수에 대한 설명은 Section 7.1.8, “Server System Variables”를 참조하십시오. 이들 시스템 변수는 어떤 변경 알림이 발생할지 제어할 수 있게 해주지만, 알림 정보를 액세스하는 방법을 제공하지는 않습니다. 알림은 MySQL 클라이언트/서버 프로토콜 내에서 발생하며, 여기서 OK 패킷에 추적기 정보가 포함되어 세션 상태 변경을 감지할 수 있습니다.
클라이언트 애플리케이션이 서버로부터 반환된 OK 패킷에서 상태 변경 정보를 추출할 수 있도록, MySQL C API는 다음 두 개의 함수를 제공합니다:
mysql_session_track_get_first()
는 서버로부터 수신된 상태 변경 정보의 첫 번째 부분을 가져옵니다. 자세한 내용은
mysql_session_track_get_first()를 참조하십시오.
mysql_session_track_get_next()
는 서버로부터 수신된 나머지 상태 변경 정보를 가져옵니다.
mysql_session_track_get_first()이 성공적으로 호출된 후,
이 함수가 성공을 반환하는 한 반복해서 호출하십시오.
mysql_session_track_get_next()를 참조하십시오.
mysqltest 프로그램에는
disable_session_track_info 및
enable_session_track_info 명령이 있어
세션 추적기 알림 발생 여부를 제어합니다. 이 명령을 사용하여 명령줄에서 SQL 문장이 어떤 알림을 생성하는지 확인할 수 있습니다. 예를 들어, 파일
testscript에 다음과 같은 mysqltest 스크립트가 포함되어 있다고 가정해 봅니다:
1DROP TABLE IF EXISTS test.t1; 2CREATE TABLE test.t1 (i INT, f FLOAT); 3--enable_session_track_info 4SET @@SESSION.session_track_schema=ON; 5SET @@SESSION.session_track_system_variables='*'; 6SET @@SESSION.session_track_state_change=ON; 7USE information_schema; 8SET NAMES 'utf8mb4'; 9SET @@SESSION.session_track_transaction_info='CHARACTERISTICS'; 10SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 11SET TRANSACTION READ WRITE; 12START TRANSACTION; 13SELECT 1; 14INSERT INTO test.t1 () VALUES(); 15INSERT INTO test.t1 () VALUES(1, RAND()); 16COMMIT;
활성화된 추적기가 제공하는 정보를 확인하기 위해 스크립트를 다음과 같이 실행합니다. 다양한 추적기에 대해 mysqltest가 표시하는
Tracker: 정보에 대한 설명은
mysql_session_track_get_first()를 참조하십시오.
1$> mysqltest < testscript 2DROP TABLE IF EXISTS test.t1; 3CREATE TABLE test.t1 (i INT, f FLOAT); 4SET @@SESSION.session_track_schema=ON; 5SET @@SESSION.session_track_system_variables='*'; 6-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES 7-- session_track_system_variables 8-- * 9 10SET @@SESSION.session_track_state_change=ON; 11-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES 12-- session_track_state_change 13-- ON 14 15USE information_schema; 16-- Tracker : SESSION_TRACK_SCHEMA 17-- information_schema 18 19-- Tracker : SESSION_TRACK_STATE_CHANGE 20-- 1 21 22SET NAMES 'utf8mb4'; 23-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES 24-- character_set_client 25-- utf8mb4 26-- character_set_connection 27-- utf8mb4 28-- character_set_results 29-- utf8mb4 30 31-- Tracker : SESSION_TRACK_STATE_CHANGE 32-- 1 33 34SET @@SESSION.session_track_transaction_info='CHARACTERISTICS'; 35-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES 36-- session_track_transaction_info 37-- CHARACTERISTICS 38 39-- Tracker : SESSION_TRACK_STATE_CHANGE 40-- 1 41 42-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS 43-- 44 45-- Tracker : SESSION_TRACK_TRANSACTION_STATE 46-- ________ 47 48SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 49-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS 50-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 51 52SET TRANSACTION READ WRITE; 53-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS 54-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ WRITE; 55 56START TRANSACTION; 57-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS 58-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION READ WRITE; 59 60-- Tracker : SESSION_TRACK_TRANSACTION_STATE 61-- T_______ 62 63SELECT 1; 641 651 66-- Tracker : SESSION_TRACK_TRANSACTION_STATE 67-- T_____S_ 68 69INSERT INTO test.t1 () VALUES(); 70-- Tracker : SESSION_TRACK_TRANSACTION_STATE 71-- T___W_S_ 72 73INSERT INTO test.t1 () VALUES(1, RAND()); 74-- Tracker : SESSION_TRACK_TRANSACTION_STATE 75-- T___WsS_ 76 77COMMIT; 78-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS 79-- 80 81-- Tracker : SESSION_TRACK_TRANSACTION_STATE 82-- ________ 83 84ok
START TRANSACTION statement 이전에, 다음 트랜잭션에 대한 isolation level과 access mode 특성을 설정하는 두 개의 SET TRANSACTION statement가 실행됩니다.
SESSION_TRACK_TRANSACTION_CHARACTERISTICS
값은 설정된 next-transaction 값을 나타냅니다.
트랜잭션을 종료하는 COMMIT statement 이후에,
SESSION_TRACK_TRANSACTION_CHARACTERISTICS
값은 비어 있는 것으로 보고됩니다. 이는 트랜잭션 시작 이전에 설정된 next-transaction 특성이 리셋되었으며, 세션 기본값이 적용됨을 나타냅니다. 해당 세션 기본값에 대한 변경을 추적하려면,
transaction_isolation 및
transaction_read_only 시스템
변수의 세션 값을 추적하십시오.
GTID에 대한 정보를 확인하려면,
session_track_gtids 시스템
시스템 변수를 사용하여 SESSION_TRACK_GTIDS 추적기를 활성화하십시오.
7.1.17 Server-Side Help Support
7.1.19 The Server Shutdown Process