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_socket
或server_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
套接字状态IDLE
或ACTIVE
。使用相应的 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_xxx
table 的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
)