前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL如何管理客户端的连接?

MySQL如何管理客户端的连接?

作者头像
MySQLSE
发布2020-09-28 15:49:20
3.2K0
发布2020-09-28 15:49:20
举报

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_cachedThreads_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” 进行阅读。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL解决方案工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档