MySQL 8.0 リファレンスマニュアル


27.12.3.5 socket_instances テーブル

socket_instances テーブルは MySQL サーバーへのアクティブな接続のリアルタイムスナップショットを提供します。 テーブルには、TCP/IP または Unix ソケットファイル接続ごとに 1 行含まれます。 このテーブルで使用可能な情報は、サーバーへのアクティブな接続のリアルタイムスナップショットを提供します。 (ソケット操作や送受信されたバイト数などのネットワークアクティビティーを含む、追加の情報はソケットサマリーテーブルで入手できます。セクション27.12.18.9「ソケットサマリーテーブル」を参照してください)。

mysql> SELECT * FROM performance_schema.socket_instances\G
*************************** 1. row ***************************
           EVENT_NAME: wait/io/socket/sql/server_unix_socket
OBJECT_INSTANCE_BEGIN: 4316619408
            THREAD_ID: 1
            SOCKET_ID: 16
                   IP:
                 PORT: 0
                STATE: ACTIVE
*************************** 2. row ***************************
           EVENT_NAME: wait/io/socket/sql/client_connection
OBJECT_INSTANCE_BEGIN: 4316644608
            THREAD_ID: 21
            SOCKET_ID: 39
                   IP: 127.0.0.1
                 PORT: 55233
                STATE: ACTIVE
*************************** 3. row ***************************
           EVENT_NAME: wait/io/socket/sql/server_tcpip_socket
OBJECT_INSTANCE_BEGIN: 4316699040
            THREAD_ID: 1
            SOCKET_ID: 14
                   IP: 0.0.0.0
                 PORT: 50603
                STATE: ACTIVE

ソケットインストゥルメントは形式 wait/io/socket/sql/socket_type の名前を持ち、次のように使用されます。

  1. サーバーには、それがサポートする各ネットワークプロトコルの待機ソケットがあります。 TCP/IP または Unix ソケットファイル接続の待機ソケットに関連付けられているインストゥルメントは、それぞれ server_tcpip_socket または server_unix_socketsocket_type 値を持ちます。

  2. 待機ソケットが接続を検出すると、サーバーは接続を、個別のスレッドによって管理される新しいソケットに転送します。 新しい接続スレッドのインストゥルメントは、client_connectionsocket_type 値を持ちます。

  3. 接続が終了すると、socket_instances 内のそれに対応する行が削除されます。

socket_instances テーブルにはこれらのカラムがあります。

  • EVENT_NAME

    イベントを生成した wait/io/socket/* インストゥルメントの名前。 これは setup_instruments テーブルからの NAME 値です。 セクション27.6「パフォーマンススキーマインストゥルメント命名規則」に説明するように、インストゥルメント名には複数の部分があり、階層を形成することがあります。

  • OBJECT_INSTANCE_BEGIN

    このカラムは一意にソケットを識別します。 この値はメモリー内のオブジェクトのアドレスです。

  • THREAD_ID

    サーバーによって割り当てられた内部スレッド識別子。 各ソケットは単一のスレッドによって管理されるため、各ソケットはスレッドにマップでき、スレッドはサーバープロセスにマップできます。

  • SOCKET_ID

    ソケットに割り当てられている内部ファイルハンドル。

  • IP

    クライアントの IP アドレス。 この値は IPv4 または IPv6 アドレスのいずれか、または Unix ソケットファイル接続を示すブランクになります。

  • PORT

    0 から 65535 の範囲の TCP/IP ポート番号。

  • STATE

    IDLE または ACTIVE のいずれかのソケットステータス。 アクティブなソケットの待機時間は、対応するソケットインストゥルメントを使用して追跡されます。 アイドルソケットの待機時間は、idle インストゥルメントを使用して追跡されます。

    ソケットはクライアントからのリクエストを待機している場合、アイドルになります。 ソケットがアイドルになると、ソケットを追跡している socket_instances 内のイベント行が ACTIVE のステータスから IDLE に切り替わります。 EVENT_NAME 値は wait/io/socket/* のままになりますが、インストゥルメントのタイミングは一時停止されます。 代わりに、idleEVENT_NAME 値で events_waits_current テーブルにイベントが生成されます。

    次のリクエストを受信すると、idle イベントが終了し、ソケットインスタンスが IDLE から ACTIVE に切り替わり、ソケットインストゥルメントのタイミングが再開します。

socket_instances テーブルには次のインデックスがあります:

  • 主キー (OBJECT_INSTANCE_BEGIN)

  • (THREAD_ID) のインデックス

  • (SOCKET_ID) のインデックス

  • (IPPORT) のインデックス

TRUNCATE TABLE は、socket_instances テーブルに対して許可されていません。

IP:PORT カラムの組み合わせの値は接続を識別します。 この組み合わせの値は、ソケットイベントの発生元の接続を識別するために、events_waits_xxx テーブルの OBJECT_NAME カラムで使用されます。

  • Unix ドメインリスナーソケット (server_unix_socket) の場合、ポートは 0 で IP は '' です。

  • Unix ドメインリスナー経由のクライアント接続 (client_connection) の場合、ポートは 0 で IP は '' です。

  • TCP/IP サーバーリスナーソケット (server_tcpip_socket) の場合、ポートは常にマスターポート (たとえば 3306) で、IP は常に 0.0.0.0 です。

  • TCP/IP リスナー経由のクライアント接続 (client_connection) の場合、ポートはサーバーが割り当てたものになりますが、0 にはなりません。 IP は発信元ホストの IP (ローカルホストの場合 127.0.0.1 または ::1) です


関連キーワード:  テーブル, パフォーマンス, スキーマ, ソケット, instances, 接続, events, replication, イベント, インストゥルメント