MySQL连接池配置参数如何调整_影响性能的关键点?

上周我读了一篇关于 MySQL 连接池的文章。

其实有很多重要的参数。

initialSize 和 minIdle 必须一致。

比如initSize设置为2 0,minIdle也设置为2 0。

这样启动时就会有2 0个连接。

minIdle 设置为与 initSize 相同,以防止突发请求到达。

maxActive是根据并发数计算的。

例如,如果并发数为 1 00,则平均请求为 1 00 毫秒。

理论需要 1 0 个连接。

其实可以设置3 0到5 0。

我们看一下数据库的max_connections。

maxWait 通常设置在 5 00 到 1 000 毫秒之间。

如果超时较多,请检查SQL是否有问题。

或者 maxActive 应该更大吗?
minEvictableIdleTimeMillis 通常设置为 3 0 分钟到 1 小时。

testOnBorrow 应该关闭。

应该启用 testwhileIdle。

只需为验证查询设置 SELECT 1 即可。

validationQueryTimeout 设置为 1 秒。

不需要死连接。

连接组类型,HikariCP最好。

Druid有很多功能。

请勿使用 DBCP 和 C3 P0。

初始设置可以这样设置。

initialSize 和 minIdle 设置为 2 0。

maxActive 设置为 3 0 到 5 0。

maxWait 设置为 5 00 到 1 000 毫秒。

然后跟进。

使用 Prometheus 或 Grafana。

让我们看看如何使用连接池。

逐步调整参数。

看看等待时间是否过多。

非活动连接回收是如何完成的?
是否涵盖资格测试?
从长远来看,需要考虑业务增长。

定期检查参数是否合适。

算了。

druid数据库连接池配置详解

Druid连接池配置是否正确,直接关系到数据库能否顺利使用。
我会引导你了解关键点,不要让它太复杂。

网址必须正确输入 数据库类型不同,URL格式也不同。
以MySQL为例: jdbc:mysql://localhost:3 3 06 /your_database?useSSL=false&serverTimezone=UTC 在这串字符中,localhost是IP,3 3 06 是端口,your_database是数据库名称。
注意? 以下参数不要写错。
例如,对于MySQL 8 .0及以上版本,必须添加serverTimezone=UTC,否则时间将不匹配。
驱动版本也必须与数据库版本匹配,不要随意匹配。

不要硬编码用户名和密码 直接在代码中写入用户名和密码是不安全的。
建议使用环境变量或使用HashiCorp的Vault等工具来加密存储。
例如,您将密码更改为 AES 加密的字符串,然后在启动应用程序时对其进行解密。

驱动类名不能错 driverClassName填写MySQL驱动程序的全名:com.mysql.cj.jdbc.Driver。
注意MySQL5 .7 和MySQL8 .0的驱动不同,版本不兼容,无法连接数据库。

初始化连接数initialSize 这个值很关键。
如果设置太低,应用程序将启动缓慢,您将不得不缓慢等待连接建立。
设置得太高会浪费资源。
一般根据启动时的并发数来设置,比如5 到1 0当你的应用程序启动时,只有1 0个人会访问数据库,所以将initialSize设置为6 就足够了。

最小空闲连接minIdle 这个只需要比initialSize稍微小一点,比如5 为什么呢? 如果突然有一个用户来访问,而没有空闲的连接池,你就必须创建一个新的连接池,这需要时间。
但如果minIdle设置得太低,用户一来就创建一个,很浪费资源。

最大活动连接数 maxActive 这才是最可怕的! 如果设置太低,用户较多时无法连接数据库,应用会直接卡死。
之前做项目的时候,我把maxActive设置为5 0,结果大促期间用户这么多的时候,我立刻就不知所措了。
后来调整到1 5 0才稳定下来。
如果设置太高,数据库无法处理,CPU 飙升至 1 00%。
这取决于您的数据库服务器的性能。
例如MySQL的最大连接数是3 00,所以将maxActive设置为2 00就足够了。

最大等待时间maxWait 用户等待连接的最长时间。
设置太短,用户迫不及待直接报错。
设置得太长,以后就会出现问题。
一般设置为3 ~5 秒,比如3 000毫秒。

连接验证 数据库连接使用时间长了就会挂掉,所以必须定期检查。
validationQuery 使用 SQL 命令来检查连接是否处于活动状态。
例如MySQL可以使用SELECT 1 testWhileIdle在空闲时也会被检查,建议打开它。
检查 timeBetweenEvictionRunsMillis 的频率,例如 6 0 秒。

连接泄漏处理 有时连接用完后仍保持打开状态,这称为泄漏。
设置removeAbandoned为true,发现泄漏会自动回收。
removeAbandonedTimeout是超时时间,比如3 00秒。
如果超过,将被强制回收。

监控是必须的 将 stat 和 wall 添加到过滤器。
stat是统计信息,wall是SQL防火墙。
添加后可以通过访问查看连接池状态/德鲁伊/索引。
使用您的浏览器。
哪个连接繁忙、哪个连接空闲一目了然。

常见问题解答 1 . 连接耗尽: 检查日志,看看是否存在等待空闲对象超时。
解决方案:
向上调整maxActive,例如从1 00到2 00(但要确保数据库可以处理)
检查是否存在连接泄漏(removeAbandoned 设置为 true)
2 . 资源浪费: 数据库CPU已满,但只有1 0个用户。
解决方案:
向下调整initialSize和minIdle,例如从2 0调整到5
使用Druid监控查看连接的实际使用情况
3 . 版本问题: 连接失败或功能不正确。
解决方案:
确认驱动程序版本与数据库版本匹配。
比如MySQL8 .0必须使用mysql-connector-java8 .0+
总结 核心是根据实际场景调整参数,不要盲目设置。
必要的工具是监控,比如 Druid 或 Prometheus 自带的工具。
不要硬编码密码,使用环境变量。