25.12.3.5 socket_instancestable

socket_instancestable 提供了与 MySQL 服务器的活动连接的实时快照。该 table 每个 TCP/IP 或 Unix 套接字文件连接包含一行。该 table 中可用的信息提供了到服务器的活动连接的实时快照。 (套接字摘要 table 中提供了其他信息,包括网络活动,例如套接字操作以及发送和接收的字节数;请参阅第 25.12.15.8 节“套接字摘要 table”)。

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,其用法如下:

  • 服务器为它支持的每个网络协议都有一个侦听套接字。与用于 TCP/IP 或 Unix 套接字文件连接的侦听套接字关联的工具的* socket_type *值分别为server_tcpip_socketserver_unix_socket

  • 当侦听套接字检测到连接时,服务器会将连接转移到由单独线程 Management 的新套接字。新连接线程的工具的* socket_type *值为client_connection

  • 连接终止后,将删除socket_instances中与其对应的行。

socket_instancestable 具有以下列:

  • EVENT_NAME

产生事件的wait/io/socket/*仪器的名称。这是setup_instrumentstable 中的NAME值。乐器名称可能包含多个部分,并形成一个层次结构,如第 25.6 节“性能架构工具命名约定”中所述。

  • OBJECT_INSTANCE_BEGIN

此列唯一标识套接字。该值是对象在内存中的地址。

  • THREAD_ID

服务器分配的内部线程标识符。每个套接字由一个线程 Management,因此每个套接字可以 Map 到一个线程,该线程可以 Map 到服务器进程。

  • SOCKET_ID

分配给套接字的内部文件句柄。

  • IP

Client 端 IP 地址。该值可以是 IPv4 或 IPv6 地址,也可以是空白以指示 Unix 套接字文件连接。

  • PORT

TCP/IP 端口号,范围为 0 到 65535.

  • STATE

套接字状态IDLEACTIVE。使用相应的 socket 仪器跟踪活动 socket 的 await 时间。使用idle仪器跟踪空闲套接字的 await 时间。

如果套接字正在 awaitClient 端的请求,则它是空闲的。当套接字空闲时,跟踪套接字的socket_instances中的事件行从ACTIVE状态切换到IDLE状态。 EVENT_NAME值保持为wait/io/socket/*,但仪器的计时已暂停。而是在_table 中生成一个EVENT_NAME值为idle的事件。

收到下一个请求时,idle事件终止,套接字实例从IDLE切换到ACTIVE,并且套接字工具的计时恢复。

socket_instancestable 不允许TRUNCATE TABLE

IP:PORT列组合值标识连接。在events_waits_xxxtable 的OBJECT_NAME列中使用此组合值来标识套接字事件来自的连接:

  • 对于 Unix 域侦听器套接字(server_unix_socket),端口为 0,IP 为''

  • 对于通过 Unix 域侦听器(client_connection)的 Client 端连接,端口为 0,IP 为''

  • 对于 TCP/IP 服务器侦听器套接字(server_tcpip_socket),该端口始终是主端口(例如 3306),而 IP 始终是0.0.0.0

  • 对于通过 TCP/IP 侦听器(client_connection)进行的 Client 端连接,该端口是服务器分配的端口,但绝不为 0.IP 是始发主机的 IP(localhost 为127.0.0.1::1)