MySQL能够监听不一样接口的客户端链接,并经过一个链接管理线程控制全部的客户端链接。html
在Unix平台上,链接管理线程能够控制来自Unix socket文件的请求。在Windows平台上能够控制来自shared memory链接请求和named-pipe链接请求。除此以外、MySQL支持来自全部平台的TCP/IP链接请求,从MySQL8.0开始,额外增长了一个经过TCP/IP接收的管理专用链接请求。mysql
MySQL管理客户端的链接方式有两种:sql
1、链接管理线程为每一个客户端的链接分配一个专用线程,用来进行认证及处理每一个链接的请求。在这种方式里管理线程会使用到线程缓存,当监听到一个客户端的链接,管理线程会先在线程缓存里面进行查找,确认里面是否包含能够用于链接的线程,若是不存在,则会建立一个新线程。链接结束时,若是缓存未满,会将线程返回给线程缓存。缓存
在这种链接方式下,若是服务器须要控制大量的链接,会为服务器带来不断建立和处理线程的开销,大量的线程会影响到服务器和内核的资源,例如栈空间等。为了保持大量的并发链接,每一个线程使用的栈空间尽量保持较小,这样就会致使栈空间过小,或服务器消耗大量的内存。与此同时,其它的资源也有可能耗尽,调度开销也会很是大。服务器
能够经过MySQL的系统变量和状态变量对服务器的管理链接线程进行控制和监测。并发
thread_cache_size:用来决定线程缓存的大小,若是将其配置为0,不使用缓存,将会为每一个链接建立一个线程,并在链接结束时终止该线程。设置为其它数值时,意味着将会缓存该数值的线程。socket
thread_stack :控制着SQL语句的复杂度,存储过程的递归深度以及其它消耗内存的各类行为。根据须要为每一个线程设置相应字节的栈大小。ide
Threads_cached和Threads_created :能够经过这两个状态变量来监控线程是否来自缓存。性能
max_connections:控制着最大链接数,MySQL8.0以后,服务器容许的最大链接数为该变量值+1,额外的一个链接是管理帐户专用,须要帐户具备CONNECTION_ADMIN 权限,或者SUPER 权限。在8.0.19版本以前,用于群组复制的内部链接会计算在该数值以内,8.0.19以后用于群组复制的链接将分开计算。操作系统
客户端最大链接数受到下面几个因素的影响:
操做系统线程库的质量。
有效内存大小。
每一个链接使用的内存大小。
每一个链接的工做负载。
指望的应答时间。
Linux和Solaris客户支持500~1000的并发链接,若是使用了大量的内存,而且对应答时间要求不高,也可使用超过10000的并发链接。
2、线程池方式,该方式须要使用线程池插件,这个插件包含在MySQL企业版里面,这个插件用于改善链接性能。关于其详细内容,将会在另一篇里介绍,同时您也能够访问“https://dev.mysql.com/doc/refman/8.0/en/thread-pool.html” 进行阅读。