#### 27.12.3.5 The socket\_instances Table

[]()[]()[]()[]()

 The [`socket_instances`](performance-schema-socket-instances-table.html) table provides a real-time snapshot of the active connections to the MySQL server. The table contains one row per TCP/IP or Unix socket file connection. Information available in this table provides a real-time snapshot of the active connections to the server. (Additional information is available in socket summary tables, including network activity such as socket operations and number of bytes transmitted and received; see [Section 27.12.20.9, “Socket Summary Tables”](performance-schema-socket-summary-tables.html)).

```
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 instruments have names of the form `wait/io/socket/sql/*`socket_type`*` and are used like this:

1. The server has a listening socket for each network protocol that it supports. The instruments associated with listening sockets for TCP/IP or Unix socket file connections have a *`socket_type`* value of `server_tcpip_socket` or `server_unix_socket`, respectively.

2. When a listening socket detects a connection, the server transfers the connection to a new socket managed by a separate thread. The instrument for the new connection thread has a *`socket_type`* value of `client_connection`.

3. When a connection terminates, the row in [`socket_instances`](performance-schema-socket-instances-table.html) corresponding to it is deleted.

 The [`socket_instances`](performance-schema-socket-instances-table.html) table has these columns:

* `EVENT_NAME`

   The name of the `wait/io/socket/*` instrument that produced the event. This is a `NAME` value from the [`setup_instruments`](performance-schema-setup-instruments-table.html) table. Instrument names may have multiple parts and form a hierarchy, as discussed in [Section 27.6, “Performance Schema Instrument Naming Conventions”](performance-schema-instrument-naming.html).

* `OBJECT_INSTANCE_BEGIN`

   This column uniquely identifies the socket. The value is the address of an object in memory.

* `THREAD_ID`

   The internal thread identifier assigned by the server. Each socket is managed by a single thread, so each socket can be mapped to a thread which can be mapped to a server process.

* `SOCKET_ID`

   The internal file handle assigned to the socket.

* `IP`

   The client IP address. The value may be either an IPv4 or IPv6 address, or blank to indicate a Unix socket file connection.

* `PORT`

   The TCP/IP port number, in the range from 0 to 65535.

* `STATE`

   The socket status, either `IDLE` or `ACTIVE`. Wait times for active sockets are tracked using the corresponding socket instrument. Wait times for idle sockets are tracked using the `idle` instrument.

   A socket is idle if it is waiting for a request from the client. When a socket becomes idle, the event row in [`socket_instances`](performance-schema-socket-instances-table.html) that is tracking the socket switches from a status of `ACTIVE` to `IDLE`. The `EVENT_NAME` value remains `wait/io/socket/*`, but timing for the instrument is suspended. Instead, an event is generated in the [`events_waits_current`](performance-schema-events-waits-current-table.html) table with an `EVENT_NAME` value of `idle`.

   When the next request is received, the `idle` event terminates, the socket instance switches from `IDLE` to `ACTIVE`, and timing of the socket instrument resumes.

 The [`socket_instances`](performance-schema-socket-instances-table.html) table has these indexes:

* Primary key on (`OBJECT_INSTANCE_BEGIN`)

* Index on (`THREAD_ID`)

* Index on (`SOCKET_ID`)

* Index on (`IP`, `PORT`)

[`TRUNCATE TABLE`](truncate-table.html) is not permitted for the [`socket_instances`](performance-schema-socket-instances-table.html) table.

 The `IP:PORT` column combination value identifies the connection. This combination value is used in the `OBJECT_NAME` column of the `events_waits_*`xxx`*` tables, to identify the connection from which socket events come:

* For the Unix domain listener socket (`server_unix_socket`), the port is 0, and the IP is `''`.

* For client connections via the Unix domain listener (`client_connection`), the port is 0, and the IP is `''`.

* For the TCP/IP server listener socket (`server_tcpip_socket`), the port is always the master port (for example, 3306), and the IP is always `0.0.0.0`.

* For client connections via the TCP/IP listener (`client_connection`), the port is whatever the server assigns, but never 0. The IP is the IP of the originating host (`127.0.0.1` or `::1` for the local host)

