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_IDsocket 的内部文件句柄。
-
IP客户端 IP 地址。值可能是 IPv4 或 IPv6 地址,也可能是空白,以表示 Unix socket 文件连接。
-
PORTTCP/IP 端口号,范围为 0 到 65535。
-
STATEsocket 状态,既可以是
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_ 表的 xxxOBJECT_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对于本地主机)