Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL性能优化必知:长连接、短连接、连接池

MySQL性能优化必知:长连接、短连接、连接池

作者头像
码农架构
发布于 2021-01-25 02:21:57
发布于 2021-01-25 02:21:57
9.5K1
举报
文章被收录于专栏:码农架构码农架构

数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信。客户端必须使用数据库连接来发送命令和接收应答、数据。通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了。可以查阅程序语言手册来获知通过何种方式使用短连接、长连接。

01

短连接

短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。短连接简单来说就是每一次操作数据库,都要打开和关闭数据库连接,基本步骤是:连接→数据传输→关闭连接。

在慢速网络下使用短连接,连接的开销会很大;在生产繁忙的系统中,连接也可能会受到系统端口数的限制,如果要每秒建立几千个连接,那么连接断开后,端口不会被马上回收利用,必须经历一个“FIN”阶段的等待,直到可被回收利用为止,这样就可能会导致端口资源不够用。在Linux上,可以通过调整/proc/sys/net/ipv4/ip_local_port_range来扩大端口的使用范围;调整/proc/sys/net/ipv4/tcp_fin_timeout来减少回收延期(如果想在应用服务器上调整这个参数,一定要慎重!)。

另外一个办法是主机使用多个IP地址。端口数的限制其实是基于同一个IP:PORT的,如果主机增加了IP,MySQL就可以监听多个IP地址,客户端也可以选择连接某个IP:PORT,这样就增加了端口资源。

02

长连接

长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。使用长连接的初衷是减少连接的开销,尽管MySQL的连接比其他数据库要快得多。

以PHP程序为例,当收到一个永久连接的请求时,PHP将检查是否已经存在一个(前面已经开启了的)相同的永久连接。如果存在,则将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。

从客户端的角度来说,使用长连接有一个好处,可以不用每次创建新连接,若客户端对MySQL服务器的连接请求很频繁,永久连接将更加高效。对于高并发业务,如果可能会碰到连接的冲击,推荐使用长连接或连接池。

从服务器的角度来看,情况则略有不同,它可以节省创建连接的开销,但维持连接也是需要内存的。如果滥用长连接的话,可能会使用过多的MySQL服务器连接。现代的操作系统可以拥有几千个MySQL连接,但很有可能绝大部分都是睡眠(sleep)状态的,这样的工作方式不够高效,而且连接占据内存,也会导致内存的浪费。

对于扩展性好的站点来说,其实大部分的访问并不需要连接数据库。如果用户需要频繁访问数据库,那么可能会在流量增大的时候产生性能问题,此时长短连接都是无法解决问题的,所以应该进行合理的设计和优化来避免性能问题。

如果客户端和MySQL数据库之间有连接池或Proxy代理,一般在客户端推荐使用短连接。对于长连接的使用一定要慎重,不可滥用。如果没有每秒几百、上千的新连接请求,就不一定需要长连接,也无法从长连接中得到太多好处。在Java语言中,由于有连接池,如果控制得当,则不会对数据库有较大的冲击,但PHP的长连接可能导致数据库的连接数超过限制,或者占用过多的内存。

对此,研发工程师、系统运维工程师、DBA需要保持沟通,确定合理的连接策略,千万不要不假思索就采用长连接。

03

连接池

由于一些数据库创建和销毁连接的开销很大,或者相对于所执行的具体数据操作,连接所耗的资源过多,此时就可能需要添加连接池来改进性能。

数据库连接池是一些网络代理服务或应用服务器实现的特性,如J2EE服务器,它实现了一个持久连接的“池”,允许其他程序、客户端来连接,这个连接池将被所有连接的客户端共享使用,连接池可以加速连接,也可以减少数据库连接,降低数据库服务器的负载。

04

持久连接和连接池的区别

长连接是一些驱动、驱动框架、ORM工具的特性,由驱动来保持连接句柄的打开,以便后续的数据库操作可以重用连接,从而减少数据库的连接开销。而连接池是应用服务器的组件,它可以通过参数来配置连接数、连接检测、连接的生命周期等。

如果连接池或长连接使用的连接数很多,有可能会超过数据库实例的限制,那么就需要留意连接相关的设置了,比如连接池的最小、最大连接数设置,以及php-fpm的进程个数等,否则程序将不能申请新的连接。

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

本文分享自 码农架构 微信公众号,前往查看

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

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

评论
登录后参与评论
1 条评论
热度
最新
你好,没明白这句话“如果客户端和MySQL数据库之间有连接池或Proxy代理,一般在客户端推荐使用短连接” 既然有连接池了,连接池里不是有长连接吗,直接从连接池里拿一个连接给客户端用就行了,为什么还推荐客户端使用短连接?
你好,没明白这句话“如果客户端和MySQL数据库之间有连接池或Proxy代理,一般在客户端推荐使用短连接” 既然有连接池了,连接池里不是有长连接吗,直接从连接池里拿一个连接给客户端用就行了,为什么还推荐客户端使用短连接?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
YashanDB数据库连接池配置及性能优化指南
在现代数据库系统中,高效的连接管理是保证应用系统性能和稳定性的关键因素之一。针对YashanDB数据库,如何合理配置连接池以优化查询速度、提高资源利用率及兼顾系统的并发处理能力,是数据库管理与应用开发中的重要技术议题。连接池配置不当,可能导致系统响应延迟增大、资源占用异常或连接瓶颈,从而影响业务连续性和用户体验。本文将基于YashanDB的架构原理和模块设计,详细介绍连接池配置的技术要点与性能优化策略,帮助开发者和DBA正确理解并应用连接池管理技术。
数据库砖家
2025/08/29
710
MySQL 线程池&连接池&长连接&短连接
线程池 简介 1、mysql每连接每线程,mysql都分配一个单独的线程,该线程处理客户端发来的所有命令 2、每个线程会占用一定的系统资源,线程数越多消耗的系统资源也越多 3、线程的创建和销毁有一定的开销 4、当线程数过多时,如果大部分线程都处于活跃状态,会导致频繁的上下文切换,从而造成系统巨大的开销 5、线程的本质就是线程共用,多个连接之间共享线程 何时使用 1、在有大量短查询的业务场景下 2、大量长查询的业务场景下不适合使用线程池,由于长查询占据了线程池的线程,导致线程池出现效率低下的情况 组成 1、线
lyb-geek
2022/03/10
2.1K0
一篇搞懂TCP、HTTP、Socket、Socket连接池
前言:作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼,然而它们之间的关系、区别及原理并不是所有人都能理解清楚,这篇文章就从网络协议基础开始到Socket连接池,一步一步解释他们之间的关系。
数澜科技
2019/10/17
2.8K0
gRPC 网关,针对 HTTP 2.0 长连接性能优化,提升吞吐量
简单看下即可,由于含有定制化业务背景,架构图看不懂也没关系,后面我会对里面的核心技术点单独剖析讲解
微观技术
2021/07/05
4.3K0
一篇搞懂TCP、HTTP、Socket、Socket连接池
前言:作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼,然而它们之间的关系、区别及原理并不是所有人都能理解清楚,这篇文章就从网络协议基础开始到Socket连接池,一步一步解释他们之间的关系。
用户8568307
2022/03/14
2K0
一篇搞懂TCP、HTTP、Socket、Socket连接池
[PHP] time_wait与长连接短连接
服务端上查看tcp连接的建立情况,直接使用netstat命令来统计,看到了很多的time_wait状态的连接.这些状态是tcp连接中主动关闭的一方会出现的状态.该服务器是nginx的webserver监听80端口,搭配的php-fpm监听9000端口,连接其他服务器数据库3960端口,连接其他服务器的memcache 50028端口.
唯一Chat
2019/11/07
1.7K0
[PHP] time_wait与长连接短连接
应用服务器整合第三方连接池
数据库连接池是应用服务器的基本功能,但有时用户因为性能、监控等需求,想使用第三方的连接池。如果只是使用第三方连接池管理数据库连接,那么直接在应用中引入就可以了,但如果用户同时还需要应用服务器的分布式事务和安全服务,就没那么简单了。
mazhen
2023/11/24
3090
应用服务器整合第三方连接池
MySQL 最佳实践:程序端连接池配置
现代网站架构/业务架构越来越重视横向拓展的能力,随之而来的是 Server 或者容器的数量快速增长,但是传统 RDBMS 的扩展性无法跟上这种步伐,导致大量的数据库连接不断的在数据库端创建、断开,不仅性能方面受到影响,在个别极端情况下也会导致数据库本身出现卡死等影响业务的现象。
王文安@DBA
2020/09/30
5.4K0
MySQL 最佳实践:程序端连接池配置
数据库连接池:从JDBC到高效管理的演进
从最初的JDBC手动连接数据库,到后来的ORM框架如iBATIS,再到数据库连接池如C3P0,技术的进步和互联网的发展速度是非常惊人的。现在层出不穷的各种中间件和脚手架,都是为了提高开发效率,降低开发难度,让开发者能够更专注于业务逻辑的实现。
不惑
2024/05/07
4960
数据库连接池:从JDBC到高效管理的演进
HTTP 长连接和短连接
1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。 2. 如何理解HTTP协议是无状态的 HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页
joshua317
2018/04/16
3.7K0
HTTP 长连接和短连接
极限优化:php巧用tcp长连接
上一期,和大家分享了YouTube系统架构,本期将和大家分享一个大并发下php使用tcp长连接访问后端的优化方法。 php巧用TCP长连接优化 一、面向人群 如果你的站点架构满足以下几点,那么本文的优
架构师之路
2018/02/28
2.8K0
极限优化:php巧用tcp长连接
连接池技术:简单而强大的加速数据库访问方法
以操作数据库为例,当一个数据库操作任务到来时,程序需要和数据库建立连接,进行三次握手、数据库用户验证,然后执行SQL语句,最后用户退出、四次挥手关闭连接。每次任务都执行这样的流程,那么整个流程中,真正有效而且变化的只有<执行SQL语句>这一步骤,而且每次建立连接、用户验证、关闭连接都耗费时间。
Lion 莱恩呀
2024/09/24
3270
连接池技术:简单而强大的加速数据库访问方法
【追光者系列】HikariCP连接池监控指标实战
业务方关注哪些数据库指标? 首先分享一下自己之前的一段笔记(找不到引用出处了) 系统中多少个线程在进行与数据库有关的工作?其中,而多少个线程正在执行 SQL 语句?这可以让我们评估数据库是不是系统瓶颈。 多少个线程在等待获取数据库连接?获取数据库连接需要的平均时长是多少?数据库连接池是否已经不能满足业务模块需求?如果存在获取数据库连接较慢,如大于 100ms,则可能说明配置的数据库连接数不足,或存在连接泄漏问题。 哪些线程正在执行 SQL 语句?执行了的 SQL 语句是什么?数据库中是否存在系统瓶颈或已经
芋道源码
2018/06/13
6.6K0
分析 HTTP,TCP 的长连接和短连接以及 sock
HTTP 的长连接和短连接本质上是 TCP 长连接和短连接。HTTP 属于应用层协议,在传输层使用 TCP 协议,在网络层使用 IP 协议。IP 协议主要解决网络路由和寻址问题,TCP 协议主要解决如何在 IP 层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP 有可靠,面向连接的特点。
杰哥的IT之旅
2020/06/18
5.3K0
分析 HTTP,TCP 的长连接和短连接以及 sock
【面试题精讲】MySQL-长连接和短连接
实现长连接和短连接的关键在于连接池的管理。连接池是一个维护数据库连接的池子,应用程序从池中获取连接,使用完后放回池中,而不是每次都建立新的连接。
程序员朱永胜
2023/10/26
6770
【追光者系列】HikariCP连接池监控指标实战
该指标持续飙高,说明DB连接池中基本已无空闲连接。 拿之前业务方应用pisces不可用的例子来说(如下图所示),当时所有线程都在排队等待,该指标已达172,此时调用方已经产生了大量超时及熔断,虽然业务方没有马上找到拿不到连接的根本原因,但是这个告警出来之后及时进行了重启,避免产生更大的影响。
用户1655470
2018/07/24
2.2K0
【追光者系列】HikariCP连接池监控指标实战
长连接和短连接分析
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三
猿人谷
2018/01/17
3.6K0
长连接和短连接分析
手把手教你Socket短连接和长连接
本篇文章我们先从了解一下网络通信的基本常识,小鱼将会从Socket 逐步介绍短连接、长链接,以及长连接与短连接的选择。
鳄鱼儿
2024/06/10
1.6K0
手把手教你Socket短连接和长连接
最近学习了 HTTP 连接池
6.1大促值班发现的一个问题,一个rpc接口在0~2点用户下单高峰的时候表现rt高(超过1s,实际上针对性优化过的接口rt超过这个值也是有问题的,通常rpc接口里面即使逻辑复杂,300ms应该也搞定了),可以理解,但是在4~5点的时候接口的tps已经不高了,耗时依然在600ms~700ms之间就不能理解了。
芋道源码
2020/02/20
1.6K0
最近学习了 HTTP 连接池
锅总详解短链接与长连接
短链接与长连接的应用场景及优缺点是什么?路由协议中的短链接和长连接有哪些例子?应用层的短链接及长连接协议有哪些?短链接和长连接对cpu和内存的影响有哪些?长链接、短连接与LVS的有何关联?如何优化长、短连接?
锅总
2024/10/09
7300
锅总详解短链接与长连接
相关推荐
YashanDB数据库连接池配置及性能优化指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档