私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
MySQL サーバーは、いくつかのセッション状態トラッカーを実装しています。クライアントは、これらのトラッカーがセッション状態の変更の通知を受信できるようにすることができます。
セッション状態トラッカーは次の目的に役立ちます。
トラッカー メカニズムは、MySQL コネクタとクライアント アプリケーションが、あるサーバーから別のサーバーへのセッションの移行を可能にするセッション コンテキストが利用可能かどうかを判断する方法を提供します。 (負荷分散された環境でセッションを変更するには、切り替えが可能かどうかを判断する際に考慮する必要があるセッション状態があるかどうかを検出する必要があります。)
トラッカー メカニズムにより、アプリケーションはトランザクションがあるセッションから別のセッションにいつ移動できるかを知ることができます。トランザクション ステータスの追跡によりこれが可能になるため、トランザクションを負荷の高いサーバーから負荷の低いサーバーに移動するアプリケーションに役立ちます。たとえば、クライアント接続のプールを管理する負荷分散コネクタは、プール内の利用可能なセッション間でトランザクションを移動できます。
ただし、セッションの切り替えはいつでも実行できるわけではありません。セッションが読み取りまたは書き込みを完了したトランザクションの途中にある場合、別のセッションに切り替えることは、元のセッションのトランザクションがロールバックされることを意味します。セッションの切り替えは、トランザクション内で読み取りまたは書き込み操作が実行されていない場合にのみ発生します。
合理的に切り替えられる可能性のあるトランザクションの例:
トランザクションのステータスを理解するだけでなく、トランザクションの特性も理解できるため、トランザクションが別のセッションに移動されたときに同じ特性を使用できます。これには次の特性が関係しています。
- READ ONLY
- READ WRITE
- ISOLATION LEVEL
- WITH CONSISTENT SNAPSHOT
セッション追跡アクティビティをサポートするために、次の種類のクライアント セッション状態情報の通知を提供できます。
(1) クライアント セッション状態の次のプロパティの変更:
session_track_state_change システム変数は、このトラッカーを制御します。
(2) デフォルトのスキーマ名に変更します。 session_track_schema システム変数は、このトラッカーを制御します。
(3) システム変数のセッション値を変更します。 session_track_system_variables システム変数は、このトラッカーを制御します。機密システム変数の値の変更を追跡するには、SENSITIVE_VARIABLES_OBSERVER 権限が必要です。
(4) 利用可能な GTID。 session_track_gtids システム変数は、このトラッカーを制御します。
(5) 取引の状況及び特徴に関する情報。 session_track_transaction_info システム変数は、このトラッカーを制御します。
これらのシステム変数を使用すると、どの変更通知を発生させるかを制御できますが、通知情報にアクセスする方法は提供されません。通知は MySQL クライアント/サーバー プロトコル内で行われ、セッション状態の変化を検出するために OK パケットにトラッカー情報が含まれます。
クライアント アプリケーションがサーバーから返された OK パケットから状態変更情報を抽出できるようにするために、MySQL C API は次の 1 組の関数を提供します。
mysqltest プログラムには、セッション トラッカー通知が発生するかどうかを制御する disable_session_track_info およびenable_sessionutrack_ininfo コマンドがあります。これらのコマンドを使用すると、コマンド ラインから SQL ステートメントによって生成された通知を表示できます。ファイル testscript に次の 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;
次のようにスクリプトを実行して、有効なトラッカーによって提供される情報を確認します。 。
- $> 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
START TRANSACTION ステートメントの前に、2 つの SET TRANSACTION ステートメントを実行して、次のトランザクションの分離レベルとアクセス モード特性を設定します。 SESSION_TRACK_TRANSACTION_CHARACTERISTICS 値は、設定された次のトランザクション値を示します。
トランザクションを終了する COMMIT ステートメントの後、SESSION_TRACK_transaction_CHARACTERISTICS 値は空として報告されます。これは、トランザクションの開始前に設定された次のトランザクション プロパティがリセットされ、セッションのデフォルトが適用されることを意味します。これらのセッションのデフォルトへの変更を追跡するには、transaction_inisolation およびtransaction_read_only システム変数のセッション値を追跡します。
GTID に関する情報を表示するには、SESSION_TRACK_GTIDs システム変数を使用して SESSION_TRACK_GTIDs トラッカーを有効にします。