本节描述MySQL服务器如何管理客户端连接的各个方面。
服务器能够监听多个网络接口上的客户端连接。连接管理器线程处理服务器监听的网络接口上的客户端连接请求:
在所有平台上,一个管理线程处理TCP/IP连接请求。
在Unix上,同一个管理线程还处理Unix套接字文件连接请求。
在Windows上,一个管理线程处理共享内存连接请求,另一个处理命名管道连接请求。
在所有平台上,可以启用额外的网络接口来接受管理TCP/IP连接请求。该接口可以使用处理的管理线程”普通的”TCP/IP请求,或单独的线程。
服务器不创建线程来处理它不监听的接口。例如,不支持命名管道连接的Windows服务器不会创建一个线程来处理它们。
单独的服务器插件或组件可以实现它们自己的连接接口:
X插件允许MySQL服务器使用X协议与客户端通信。看到第20.5节,“X插件”.
连接管理器线程将每个客户端连接与专门处理该连接的身份验证和请求处理的线程关联起来。管理线程在必要时创建一个新线程,但要尽量避免这样做,首先要查看线程缓存中是否包含可用于连接的线程。当连接结束时,如果线程缓存未满,则将其线程返回到线程缓存。
在这个连接线程模型中,当前连接的客户机有多少线程就有多少线程,当服务器工作负载必须扩展以处理大量连接时,这有一些缺点。例如,线程的创建和处理变得非常昂贵。而且,每个线程都需要服务器和内核资源,比如堆栈空间。为了容纳大量并发连接,每个线程的堆栈大小必须保持较小,从而导致要么太小,要么服务器消耗大量内存的情况。其他资源的耗尽也会发生,并且调度开销会变得非常大。
MySQL企业版包含一个线程池插件,它提供了一个可选的线程处理模型,旨在减少开销和提高性能。它实现了一个线程池,通过有效地管理大量客户机连接的语句执行线程来提高服务器性能。看到第5.6.3节,“MySQL企业线程池”.
为了控制和监视服务器如何管理处理客户机连接的线程,有几个系统和状态变量是相关的。(见第5.1.8节,“服务器系统变量”,第5.1.10节,“服务器状态变量”)。
的
thread_cache_size
系统变量决定线程缓存大小。默认情况下,服务器在启动时自动调整该值的大小,但可以显式设置该值以覆盖该默认值。值为0禁用缓存,这将导致为每个新连接设置一个线程,并在连接终止时丢弃该线程。要启用N
设置要缓存的非活动连接线程thread_cache_size
来N
在服务器启动或运行时。当与之关联的客户端连接终止时,连接线程将变为非活动状态。若要监视缓存中的线程数量以及由于无法从缓存中获取线程而创建的线程数量,请检查
Threads_cached
而且Threads_created
状态变量。当线程堆栈太小时,会限制服务器可以处理的SQL语句的复杂性、存储过程的递归深度和其他消耗内存的操作。设置的堆栈大小
N
用于启动服务器的每个线程的字节thread_stack
设置为N
.
若要控制服务器允许同时连接的客户机的最大数量,请设置max_connections
服务器启动或运行时的系统变量。可能有必要增加max_connections
如果有更多的客户端同时尝试连接,那么服务器将被配置为处理(参见B.3.2.5节“过多的连接”).如果服务器拒绝连接,因为max_connections
达到极限,它增加Connection_errors_max_connections
状态变量。
mysqld实际上允许max_connections
+ 1客户端连接。权限的帐户使用该额外连接CONNECTION_ADMIN
特权(或已弃用的超级
特权)。通过将权限授予管理员而不是普通用户(普通用户不应该需要此权限),管理员可以连接到服务器并使用显示PROCESSLIST
即使连接的非特权客户端数量达到最大,也要诊断问题。看到第13.7.7.29节,“SHOW PROCESSLIST语句”.
从MySQL 8.0.14开始,服务器还允许在管理网口上进行管理连接,您可以使用专用的IP地址和端口进行设置。看到第5.1.12.2节“管理连接管理”.
Group Replication插件使用内部会话与MySQL Server交互,执行SQL API操作。在MySQL 8.0.18的版本中,这些会话计算到客户端连接限制中max_connections
服务器系统变量。在这些版本中,如果服务器已经到达max_connections
limit当启动组复制或试图执行操作时,操作不成功,组复制或服务器本身可能会停止。从MySQL 8.0.19开始,组复制的内部会话与客户端连接是分开处理的,所以它们不计入max_connections
限制,如果服务器已达到此限制,则不拒绝。
MySQL支持的最大客户端连接数(也就是说,它的最大值max_connections
可以设置)取决于以下几个因素:
给定平台上线程库的质量。
可用RAM的数量。
每个连接使用的RAM数量。
每个连接的工作负载。
所需的响应时间。
可用的文件描述符的数量。
Linux或Solaris通常应该能够支持至少500到1000个并发连接,如果您有许多gb的RAM可用,并且每个RAM的工作负载很低或响应时间目标不要求很高,则可以支持多达10,000个连接。
增加了max_connections
值增加文件描述符的数量mysqld需要。如果所需数量的描述符不可用,服务器将减少的值max_connections
.有关文件描述符限制的注释,请参见第8.4.3.1节MySQL如何打开和关闭表.
增加了open_files_limit
system变量可能是必要的,这可能还需要提高操作系统对MySQL可以使用的文件描述符数量的限制。请参考您的操作系统文档,以确定是否可以增加限制以及如何增加限10bet官方网站制。另请参阅B.3.2.16节,“未找到文件和类似错误”.