详解连接池参数设置(边调边看)

Mysql-数据库优化-连接参数 这个参数是管理连接池数量的,和线程池的思想一样,spring.datasource.druid.min-idle这个相当于核心线程数,无论怎样连接池始终保持这么多的连接数量。数据库连接池化的思想也就是提前将连接创建好并保存用的时候直接拿来用,同时要进行管理,也就有了上面这些相关的参数,如果不适用池化的思想,数据库会有一个最大的连接数,如果超过这个最大连接数,数据库直接无法处客户端的查询请求。可以看到一旦达到最大连接数就会报错,异常比例是相当高的,但是使用连接池就不会有这种大量报错的现象。 阅读详情

你有同感吗?

当大家在开发服务端代码的时候,会不会经常有如下疑问?

  • 纳闷 MySQL 连接池到底有多少连接?
  • 每个连接的生命周期持续多久?
  • 连接异常断开的时候到底是服务端主动断的,还是客户端主动断的?
  • 当长时间没有请求的时候,底层库是否有 KeepAlive 请求?

复杂网络情况的处理从来都是后端开发的重点和难点之一,你是不是也为各种网络情况的调试而头顶发凉呢?

所以我写了 tproxy

当我在做后端开发和写 go-zero 的时候,经常会需要监控网络连接,分析请求内容。比如:

  • 分析 gRPC 连接何时连接、何时重连,并据此调整各种参数,比如:MaxConnectionIdle
  • 分析 MySQL 连接池,当前多少连接,连接的生命周期是什么策略
  • 也可以用来观察和分析任何 TCP 连接,看服务端主动断,还是客户端主动断等等

tproxy 的安装

$ GOPROXY=https://goproxy.cn/,direct go install github.com/kevwan/tproxy@latest

或者使用 docker 镜像:

$ docker run --rm -it -p <listen-port>:<listen-port> -p <remote-port>:<remote-port> kevinwan/tproxy:v1 tproxy -l 0.0.0.0 -p <listen-port> -r host.docker.internal:<remote-port>

arm64 系统:

$ docker run --rm -it -p <listen-port>:<listen-port> -p <remote-port>:<remote-port> kevinwan/tproxy:v1-arm64 tproxy -l 0.0.0.0 -p <listen-port> -r host.docker.internal:<remote-port>

tproxy 的用法

$ tproxy --help
Usage of tproxy:
  -d duration
            the delay to relay packets
  -l string
            Local address to listen on (default "localhost")
  -p int
            Local port to listen on
  -q        Quiet mode, only prints connection open/close and stats, default false
  -r string
            Remote address (host:port) to connect
  -t string
            The type of protocol, currently support grpc

分析 gRPC 连接

tproxy -p 8088 -r localhost:8081 -t grpc -d 100ms
localhost:8081

其中我们可以看到 gRPC 的一个请求的初始化和来回,可以看到第一个请求其中的 stream id 为 1。

再比如 gRPC 有个 MaxConnectionIdle 参数,用来设置 idle 多久该连接会被关闭,我们可以直接观察到时间到了之后服务端会发送一个 http2 的 GoAway 包。

比如我把 MaxConnectioinIdle 设为 5 分钟,连接成功之后 5 分钟没有请求,连接就被自动关闭了,然后重新建了一个连接上来。

分析 MySQL 连接

我们来分析一下 MySQL 连接池设置对连接池的影响,比如我把参数设为:

maxIdleConns = 3
maxOpenConns = 8
maxLifetime  = time.Minute
...
conn.SetMaxIdleConns(maxIdleConns)
conn.SetMaxOpenConns(maxOpenConns)
conn.SetConnMaxLifetime(maxLifetime)

我们把 MaxIdleConns 和 MaxOpenConns 设为不同值,然后我们用 hey 来做个压测:

hey -c 10 -z 10s "http://localhost:8888/lookup?url=go-zero.dev"

我们做了并发为10QPS且持续10秒钟的压测,连接结果如下图:

我们可以看到:

  • 10秒钟内建立了2000+的连接
  • 过程中在不停的关闭已有连接,重开新的连接
  • 每次连接使用完放回去,可能超过 MaxIdleConns 了,然后这个连接就会被关闭
  • 接着来新请求去拿连接时,发现连接数小于 MaxOpenConns,但是没有可用请求了,所以就又新建了连接

这也就是我们经常会看到 MySQL 很多 TIME_WAIT 的原因。

然后我们把 MaxIdleConns 和 MaxOpenConns 设为相同值,然后再来做一次相同的压测:

我们可以看到:

  • 一直维持着8个连接不变
  • 压测完过了一分钟(ConnMaxLifetime),所有连接被关闭了

这里的 ConnMaxLifetime 一定要设置的小于 wait_timeout,可以通过如下方式查看 wait_timeout 值:

我建议设置小于5分钟的值,因为有些交换机会5分钟清理一下空闲连接,比如我们在做社交的时候,一般心跳包不会超过5分钟。具体原因可以看

go-zero/sqlmanager.go at master · zeromicro/go-zero · GitHub

其中 go-sql-driver 的 issue 257 里有一段也在说 ConnMaxLifetime,如下:

14400 sec is too long. One minutes is enough for most use cases.
Even if you configure entire your DC (OS, switch, router, etc...), TCP connection may be lost from various reasons. (bug in router firmware, unstable power voltage, electric nose, etc...)

所以如果你不知道 MySQL 连接池参数怎么设置,可以参考 go-zero 的设置。

另外,ConnMaxIdleTime 对上述压测结果没有影响,其实你也不需要设置它。

深入理解数据库连接池Druid及其配置教程 本文还有配套的精品资源,点击获取 简介:数据库连接池是优化数据库交互和提高系统性能的重要组件。本文将深入探讨流行的Java连接池Druid,特别关注其1.1.21版本以及配置文件 druid.properties 的使用。Druid不仅提供连接池管理,还集成了监控、SQL解析、日志记录等附加功能。文章详细介绍了连接池的工作原理,Druid的特性,以及如何配置 ... 阅读详情

相关推荐

Windows Server远程桌面断开后,PyWinAuto/按键精灵脚本失效?试试这个‘会话保持’的终极配置

本文深入解析Windows Server远程桌面断开后导致PyWinAuto/按键精灵脚本失效的问题,提供会话保持的终极配置方案。通过转换到控制台会话(console模式)和调整组策略,确保自动化程序在断开连接后持续稳定运行,适用于Windows Server各版本。

weixin_28738165的博客 228

数据库连接池-常用参数配置及含义

1. maxActive 连接池支持的最大连接数,这里取值为20,表示同时最多有20个数据库连接。一般把maxActive设置成可能的并发量就行了设 0 为没有限制。 2. maxIdle 连接池中最多可空闲maxIdle个连接 ,这里取值为20,表示即使没有数据库连接时依然可以保持20空闲的连接,而不被清除,随时处于待命状态。设 0 为没有限制。 3. minIdle 连接池中最小空闲连接数,当连接数少于此值时,连接池会创建连接来补充到该值的数量 4. initialSize 初始化连接数目 5.

xiaokanfuchen86的博客 7273

如何制作Mike21溢油模型围油栏文件

这段时间群友在做海洋环评的做了一个MIKE21的溢油模型,溢油模型其实也是ECOLAB模块的应用,而在海上发生溢油事件的时候,为防止溢油对海洋生态的破坏,经常使用的一种手段就是使用围油栏技术将溢油控制在一定范围并进行处理。今天小编就给大家说说在MIKE21里怎么实现围油栏文件的制作

zhuzhujiayoua的博客 1332

dbcp 属性说明及完整配置

http://tomhat.iteye.com/blog/1141117 initialSize :连接池启动时创建的初始化连接数量(默认值为0) maxActive :连接池中可同时连接的最大的连接数(默认值为8,调整为20,高峰单机器在20并发左右,自己根据应用场景定) maxIdle:连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxId

836

CTP开发实战:如何高效处理预埋单与委托单的完整流程(附代码示例)

本文深入探讨了CTP开发中预埋单与委托单的完整处理流程,从订单生命周期理解、核心代码实现到异步事件处理与系统健壮性构建。通过详细的代码示例和状态机分析,为开发者提供了构建高可靠订单处理系统的实战指南,重点解决了状态同步、异常恢复等关键工程挑战。

weixin_29234239的博客 118

YOLO数据集实现数据增强的方法(裁剪、平移 、旋转、改变亮度、加噪声等)

数据集样本太少怎么办?数据集优质图像不够怎么办?如何做到更好的数据预处理?一文带你学会数据增强,还可实现带标签的扩充。

路人贾的博客 4万+

连接池总结(作用、对比、参数含义、以及讲解)

一、连接池: (一、二部分原文链接) 1、什么是连接池?为什么要用连接池?使用连接池要注意哪些事项? 一个普通的Java程序,要查询数据库的数据,基本流程是这样的:(每次访问数据库都要进行一次tcp连接和数据库认证等操作,而这些操作非常影响服务器的性能) 可以看到,进行一次查询,要进行很多次网络交互,这样的缺点是: 网络IO多 响应时间长,导致QPS降低 频繁创建连接和关闭连接,浪费数据库资源...

单枪匹码 3844

【二 Deepseek+Coze案例】【 2.2 Coze + Deepseek 实现小红书爆款笔记:打造专属Agent智能体】

摘要 本文介绍了如何利用Coze平台和Deepseek模型构建自动化Agent智能体,用于生成和优化小红书爆款笔记。文章首先分析了爆款笔记的核心特征,包括精准定位、吸引标题、实用内容、精美排版和热门标签。随后提出Agent智能体的功能需求,涵盖热点追踪、内容生成与优化、数据分析及自动发布等模块。在技术实现上,详细阐述了从环境配置、数据采集到内容生成与优化的全流程,并提供了Python代码示例,展示如何调用Coze函数获取热点数据及竞品笔记。该方案通过智能化的内容创作与运营策略,帮助用户高效打造高曝光的小红书

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 2315

常用的数据库连接池、配置参数及相应的调优方法

需要注意的是,具体的配置参数和调优方法可能因数据库的类型和版本、应用服务器的使用情况等而异。为了获得最佳的数据库连接池性能和可靠性,我们需要结合实际需求进行选择和优化,同时参考互联网上的相关资料和经验,不断调整和完善连接池的配置。数据库连接池是一种用于管理和维护数据库连接的技术,不同类型的数据库连接池具体的配置参数和调优方法也是有所不同的。1. 连接泄漏:当连接池中的连接没有被释放而一直占用时,就会造成连接泄漏,从而导致系统崩溃。# 空闲连接存活的最长时间,单位毫秒。# 空闲连接存活的最长时间,单位毫秒。

2301_78834737的博客 5697

华为OD机考双机位C卷 - 补种未成活胡杨 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 补种未成活胡杨(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 2419

YOLOv8剪枝 l1剪枝测试精度仅掉0.8个点,速度提高10.7fps!

文章摘要: 本文提出了一种基于组归一化的重要性评分方法GroupNormImportance,用于神经网络剪枝中的通道选择。该方法支持多种变体,包括标准L1范数、组L1范数和BN缩放因子等计算方式。核心实现包括三个关键部分:1)支持p范数计算(默认为L2);2)提供7种组重要性归约方法(如均值、最大值等);3)提供8种归一化方案(包括标准化、高斯化、LAMP等)。该方法输入一个剪枝组,输出各通道的重要性分数,通过依赖图可实现结构化剪枝。实验对比图展示了剪枝前后的效果差异,验证了该方法的有效性。

FJN110的博客 398

理解连接池

1. 池化技术 池化技术 (Pool) 是一种很常见的编程技巧, 在请求量大时能明显优化应用性能,降低系统频繁建连的资源开销 日常工作中常见的有数据库连接池、线程池、携程池,对象池 它们的特点都是将 “昂贵的”、“费时的” 的资源维护在一个特定的 “池子” 中, 规定其最小连接数、最大连接数、阻塞队列等配置, 方便进行统一管理和复用, 通常还会附带一些探活机制、强制回收、监控一类的配套功能。 2. 数据库连接池 数据库连接池负责分配、管理和释放数据库连接, 它允许应用程序重复使用一个现有的数据库连接,而不是

极客神殿 882

第十四节《OpenCascade集成Qt》

将 OpenCascade 与 Qt 集成是开发图形界面应用的常见需求。通过将 OpenCascade 的几何建模与 Qt 的图形用户界面(GUI)功能结合,可以创建强大而灵活的 CAD 或建模工具。OpenCascade 提供了与 Qt 的集成接口,允许你在 Qt 应用程序中嵌入 OpenCascade 的视图,执行几何操作,并与用户进行交互。以下是 OpenCascade 与 Qt 集成的详细步骤:首先,确保已安装 OpenCascade 和 Qt。你可以从 OpenCascade 官方网站或通过包管理

yumeiguo的博客 597

golang数据库连接池参数设置

可用查看mysql服务器上的连接信息,Command表示连接的当前状态,Command为Sleep时表示休眠、空闲状态,Time表示此状态的已持续时长;当连接持续空闲时长达到maxIdleTime后,该连接就会被关闭并从连接池移除,哪怕当前空闲连接数已经小于SetMaxIdleConns(maxIdleConns)设置的值。maxLifeTime必须要比mysql服务器设置的wait_timeout小,否则会导致golang侧连接池依然保留已被mysql服务器关闭了的连接。连接池里面的连接最大空闲时长。

HONG的个人博客 3617

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

druid配置参数详解

【代码】druid配置参数详解。

爱思考的People 9615

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java框架数据库连接池比较

现在常用的开源数据连接池主要有c3p0,dbcp和proxool三种,其中:¨         hibernate开发组推荐使用c3p0;¨         spring开发组推荐使用dbcp (dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect ,告诉连接被重置,这个设置可以解决);¨        

dukongting的专栏 892

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

mysql之druid连接池参数配置详解

druid常见问题在GitHub地址。

weixin_43790613的博客 5545

数据库连接池五大参数配置详解

【代码】数据库连接池五大参数配置详解。

冷脸萌萌的技术实践 2895

MYSQL数据库连接池及常见参数调优

(1)查询缓存(query_cache_size):MySQL 可以将查询的结果缓存起来,下次相同的查询就可以直接从缓存中获取,一般设置为物理内存的 10%。(1)缓冲池大小(innodb_buffer_pool_size):InnoDB 存储引擎缓存的数据和索引的大小,一般设置为物理内存的 60%-80%。(4)查询缓存大小(query_cache_size):MySQL 可以将查询的结果缓存起来,下次相同的查询就可以直接从缓存中获取。(2)错误日志(log_error):记录数据库错误日志。

lonely_baby的博客 1万+

连接池配置详解

当配置HikariCP连接池时,你可以使用以下属性来调整连接池的行为和性能。1 . ` spring.datasource.hikari.minimum-idle ` - 描述:连接池中保持的最小空闲连接数。- 默认值:10- 建议值:通常设置为5到10之间的较小值,以确保有足够的连接可用。2 . ` spring.datasource.hikari.maximum-pool-size ` - 描述:连接池中允许的最大连接数。- 默认值:10。

张小三的博客 957

mysql的最大连接数,最大空闲数

为什么要设置为64和32。 mysql的连接池最大连接数

Earth_Song的博客 3619

连接池的配置和调优

可以使用一些监控工具或框架来监控连接池的性能指标,例如连接数的分配情况、连接的空闲时间、连接的等待时间等。通过合理配置连接池的参数,并结合监控和管理,可以提高数据库连接的利用率,降低资源消耗,从而提升应用程序的性能和可靠性。例如,可以使用连接池的预处理语句功能来提高SQL执行的效率,还可以通过合理设置连接的生命周期、回收策略等来降低连接的资源消耗。通过合理配置连接池的参数,并根据应用程序的负载情况进行动态调优,可以有效地提高数据库连接的利用率,降低资源消耗,从而提升应用程序的性能和可靠性。

互联网知识分享 855

MySQL连接池的参数配置应如何指定?

MySQL连接池的配置参数可以极大地影响应用程序的性能和稳定性。正确的配置取决于多个因素,包括应用程序的性质、数据库服务器的性能、以及预期的负载。

毛豆的博客 2082

DBCP(Database Connection Pool)连接池配置参数

的核心配置参数及其详细说明,适用于 Apache Commons DBCP 或基于 DBCP 的实现(如。通过合理配置 DBCP 连接池参数,可以显著提升数据库访问性能和稳定性。这些参数用于优化数据库连接的管理和性能。

kiwixing的博客 1224

数据库连接池

数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。需要自己创建连接和销毁连接,这样是比较消耗时间,资源等。

a13641376265的博客 1507
上一篇: 详解连接池参数设置(边调边看)
下一篇: 应用配置管理,基础原理分析
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值