MySQL如何管理客户端的连接?
MySQL可以监听不同接口的客户端连接,并通过一个连接管理线程控制所有的客户端连接。
在Unix平台上,连接管理线程可以控制来自Unix socket文件的请求。在Windows平台上可以控制来自shared memory连接请求和named-pipe连接请求。除此之外、MySQL支持来自所有平台的TCP/IP连接请求,从MySQL8.0开始,额外增加了一个通过TCP/IP接收的管理专用连接请求。
MySQL管理客户端的连接方式有两种:
一、连接管理线程为每个客户端的连接分配一个专用线程,用来进行认证及处理每个连接的请求。在这种方式里管理线程会使用到线程缓存,当监听到一个客户端的连接,管理线程会先在线程缓存里面进行查找,确认里面是否包含可以用于连接的线程,如果不存在,则会创建一个新线程。连接结束时,如果缓存未满,会将线程返回给线程缓存。
在这种连接方式下,如果服务器需要控制大量的连接,会为服务器带来不断创建和处理线程的开销,大量的线程会影响到服务器和内核的资源,例如栈空间等。为了保持大量的并发连接,每个线程使用的栈空间尽可能保持较小,这样就会导致栈空间太小,或服务器消耗大量的内存。与此同时,其它的资源也有可能耗尽,调度开销也会非常大。
可以通过MySQL的系统变量和状态变量对服务器的管理连接线程进行控制和监测。
thread_cache_size:用来决定线程缓存的大小,如果将其配置为0,不使用缓存,将会为每个连接创建一个线程,并在连接结束时终止该线程。设置为其它数值时,意味着将会缓存该数值的线程。
thread_stack :控制着SQL语句的复杂度,存储过程的递归深度以及其它消耗内存的各种行为。根据需要为每个线程设置相应字节的栈大小。
Threads_cached和Threads_created :可以通过这两个状态变量来监控线程是否来自缓存。
max_connections:控制着最大连接数,MySQL8.0之后,服务器允许的最大连接数为该变量值+1,额外的一个连接是管理账户专用,需要账户具有CONNECTION_ADMIN 权限,或者SUPER 权限。在8.0.19版本之前,用于群组复制的内部连接会计算在该数值之内,8.0.19之后用于群组复制的连接将分开计算。
客户端最大连接数受到下面几个因素的影响:
-
操作系统线程库的质量。
-
有效内存大小。
-
每个连接使用的内存大小。
-
每个连接的工作负载。
-
期望的应答时间。
- 有效的文件描述符数量(open_files_limit的值及操作系统的限制)。
Linux和Solaris客户支持500~1000的并发连接,如果使用了大量的内存,并且对应答时间要求不高,也可以使用超过10000的并发连接。
二、线程池方式,该方式需要使用线程池插件,这个插件包含在MySQL企业版里面,这个插件用于改善连接性能。关于其详细内容,将会在另外一篇里介绍,同时您也可以访问“https://dev.mysql.com/doc/refman/8.0/en/thread-pool.html” 进行阅读。
- mysql如何处理一个客户端的连接
- 如何让Netty管理任意客户端连接而非服务端连接?
- 如何解决客户端与服务器端的连接(mysql) :xxx.xxx.xxx.xxx is not allowed to connect to this mysql serv
- 关于本地mysql客户端如何连接阿里云服务器上的MySQL数据库
- 如何解决客户端与服务器端的连接(mysql) :"xxx.xxx.xxx.xxx" is not allowed to connect to this mysql server.
- 服务器端如何管理很多个客户端的socket连接?
- 如何在您的笔记本上搭建View 演示环境 -8.iPad客户端安装与配置连接
- 使用mysql客户端工具远程管理mysql服务器
- MySql客户端远程连接MySql服务器
- socket长连接客户端管理
- linux上安装mysql 5.7.11完成之后 如何连接
- 探究ftp的奥妙之系统用户如何上传下载文件、vsftpd如何识别证书并利用客户端来实现远程连接传输
- 利用客户端远程连接Linux服务器端的mysql
- 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。
- mysql客户端navicat连接数据库
- cache:缓存在asp.net中如何管理?服务器端缓存?Session, Application, Cache objectscache ,客户端缓存?Cookies,ViewState
- Jmeter如何连接数据库Mysql
- MySQL(二)之服务管理与初始化文件修改和连接MySQL
- 如何使用navicat for mysql连接本地数据库,并且导入数据文件
- MySQL 服务器监听客户端连接源码