29.12.3.5 socket_instances 表
socket_instances
表提供了 MySQL 服务器当前活动连接的实时快照。该表包含每个 TCP/IP 或 Unix socket 文件连接的一行信息。该表中的信息提供了服务器当前活动连接的实时快照。 (更多信息请见 socket 汇总表,包括 socket 操作和传输的字节数等信息;请见第29.12.20.9节,“Socket Summary Tables”。)
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
socket 仪表盘的名称为 wait/io/socket/sql/
,并且用于以下方式:socket_type
-
服务器为每种网络协议都有一个监听 socket。与 TCP/IP 或 Unix socket 文件连接的监听 socket 的仪表盘的
socket_type
值为server_tcpip_socket
或server_unix_socket
,分别。 -
当监听 socket 检测到连接时,服务器将连接转移到由单独线程管理的新 socket 中。该线程的仪表盘的
socket_type
值为client_connection
。 -
当连接终止时,
socket_instances
表中的相应行将被删除。
socket_instances
表具有以下列:
-
EVENT_NAME
该事件的
wait/io/socket/*
仪表盘名称。这是setup_instruments
表中的NAME
值。仪表盘名称可能具有多个部分,并且可以形成层次结构,如Section 29.6, “Performance Schema Instrument Naming Conventions” 中所述。 -
OBJECT_INSTANCE_BEGIN
该列唯一标识 socket。值是内存中的对象地址。
-
THREAD_ID
服务器分配的内部线程标识符。每个 socket 都由单独线程管理,可以映射到服务器进程。
-
SOCKET_ID
socket 的内部文件句柄。
-
IP
客户端 IP 地址。值可能是 IPv4 或 IPv6 地址,也可能是空白,以表示 Unix socket 文件连接。
-
PORT
TCP/IP 端口号,范围为 0 到 65535。
-
STATE
socket 状态,既可以是
IDLE
也可以是ACTIVE
。对于活动套接字,等待时间使用相应的套接字仪器跟踪。对于空闲套接字,等待时间使用idle
仪器跟踪。套接字是空闲的,如果它正在等待来自客户端的请求。套接字变为空闲时,
socket_instances
中的事件行从ACTIVE
状态切换到IDLE
状态。EVENT_NAME
值保持为wait/io/socket/*
,但计时器暂停。相反,在events_waits_current
表中生成一个事件,EVENT_NAME
值为idle
。当下一个请求到达时,
idle
事件终止,套接字实例从IDLE
切换到ACTIVE
,并恢复套接字仪器的计时。
socket_instances
表具有以下索引:
-
主键在 (
OBJECT_INSTANCE_BEGIN
) -
索引在 (
THREAD_ID
) -
索引在 (
SOCKET_ID
) -
索引在 (
IP
,PORT
)
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
对于本地主机)