Connection manager threads handle client connection requests on the network interfaces that the server listens to. On all platforms, one manager thread handles TCP/IP connection requests. On Unix, this manager thread also handles Unix socket file connection requests. On Windows, a manager thread handles shared-memory connection requests, and another handles named-pipe connection requests. The server does not create threads to handle interfaces that it does not listen to. For example, a Windows server that does not have support for named-pipe connections enabled does not create a thread to handle them.
Connection manager threads associate each client connection with a thread dedicated to it that handles authentication and request processing for that connection. Manager threads create a new thread when necessary but try to avoid doing so by consulting the thread cache first to see whether it contains a thread that can be used for the connection. When a connection ends, its thread is returned to the thread cache if the cache is not full.
In this connection thread model, there are as many threads as there are clients currently connected, which has some drawbacks when server workload must scale to handle large numbers of connections. For example, thread creation and disposal becomes expensive. Also, each thread requires server and kernel resources, such as stack space. To accommodate a large number of simultaneous connections, the stack size per thread must be kept small, leading to a situation where it is either too small or the server consumes large amounts of memory. Exhaustion of other resources can occur as well, and scheduling overhead can become significant.
To control and monitor how the server manages threads that handle client connections, several system and status variables are relevant. (See Section 5.1.3, “System Variables”, and Section 5.1.6, “Status Variables”.)
The thread cache has a size determined by the
thread_cache_size system variable. The
default value is 0 (no caching), which causes a thread to be set
up for each new connection and disposed of when the connection
terminates. Set thread_cache_size to
N to allow
N inactive connection threads to be
cached. thread_cache_size can be set at
server startup or changed while the server runs. A connection
thread becomes inactive when the client connection with which it
was associated terminates.
To monitor the number of threads in the cache and how many
threads have been created because a thread could not be taken
from the cache, monitor the Threads_cached
and Threads_created status variables.
You can set max_connections at server startup
or at runtime to control the maximum number of clients that can
connect simultaneously.
When the thread stack is too small, this limits the complexity
of the SQL statements which the server can handle, the recursion
depth of stored procedures, and other memory-consuming actions.
To set a stack size of N bytes for
each thread, start the server with
--thread_stack=.
N

User Comments
Add your own comment.