池化技术在数据库连接的使用和建议
connygpt 2024-10-12 16:58 4 浏览
什么是池化技术
在日常应用中,应用使用第三方中间件往往需要进行网络通讯,而网络通讯都是基于TCP三次握手协议进行的,如果在一些高并发的系统中,往往建立连接的速度赶不上系统的速度,从而导致应用的QPS无法上去,因此往往会使用连接池技术,提前进行预创建一些连接放在连接池中,供访问随时从连接池拿连接,而不需要反反复复创建连接,关闭连接,从而提高系统的性能和资源使用率,减少频繁建立和销毁连接所带来的额外开销。那么常见的连接池有基于Http访问的HttpClient,有基于redis 访问的Jedis,也有基于数据库访问的Druid。
在数据库领域有比较成熟的数据库连接池的组件,各个连接池各有优缺点,国内使用最多的还是基于阿里开源的Druid和以性能著称的HikariCP,但连接池的参数较多,每个参数的含义需要了解清楚还是很有必要的,如果不加以正确的配置,很容易导致线上应用发生雪崩或者是服务直接被夯死,以Druid配置参数为例
Druid参数说明
initialSize:初始化时创建的连接数,连接池创建连接时,会创建initialSize个连接,以确保应用程序在启动时可以立即获取到数据库连接。
maxActive:连接池最大连接数。如果连接池中连接数达到maxActive,则应用获取连接的请求将被阻塞,直到有连接被释放。
minIdle:最小空闲连接数。如果连接池中空闲连接数少于minIdle,会创建新的连接以达到minIdle。
maxWait:获取连接时的最大等待时间(毫秒)。如果连接池中没有可用连接且已经达到最大连接数,则应用获取连接的请求将被阻塞,最多等待maxWait毫秒。
connectTimeout:配置连接超时时间。表示数据库驱动与数据库服务器建立TCP连接的超时时间。
socketTimeout:配置socket的超时时间。表示通过TCP连接发送数据(在这里就是要执行的sql)后,等待响应的超时时间。
当然还有很多其他参数,可参考下面链接,这里面就不一一说明。
https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8
Druid核心配置建议参数
initialSize:设置合理的initialSize,应用启动后可以立即处理并发需求。一般建议initialSize设置为平均并发连接数的60%-80%,MaxActive可略大于预计峰值并发量,预留一定的连接应对突发流量,建议设置成为50-100。
为什么不建议initialSize与MaActive相差很大?是因为如果相差太大,会造成在峰值的时候出现连接池里面的连接不够,而造成大量的创建连接,从而导致连接风暴,initialSize主要是参考平常大多数的连接数是多少,一般比这个稍大即可。
另外如果有一个数据库实例被多个应用使用的话,也要合理分配initialSize值,否则会出现数据库连接数过大的问题。
maxActive:一般100-150即可,当出现100-150 还不能够的时候,主要要考虑去优化SQL语句,而不是一味的扩大连接数,往往连接数被占满是因为SQL语句出现慢SQL导致,所以首要要考虑的是去优化SQL语句的性能。
minIdle:一般和初始化连接数 保持一致即可。
maxWait(ms):maxWait=-1:默认值,一直等待,maxWait=0:不等待,不推荐配置成-1和0。如果设置为0,则在峰值的时候很容易出现连接超时的报错,导致用户受损,但如果设置成为-1的时候,就会一直处于等待状态,等待被动超时,这样很容易将服务夯死,一般建议设置5000
connectTimeout:建立连接的超时时间,一般设置为2000,一般处于内网的网络环境,连接基本在毫秒级别,建立连接的耗时有限。
socketTimeout:数据库的响应时长,建议基于应用的特征进行设置,如果应用大多数是一些报表或者是一些较为复杂的查询,建议设置的时长长些60s左右,如果应用是面向C端用户的查询,且SQL语句相对较为简单,建议设置10s左右,这个取决于SQL语句的执行时长,当然需要尽一切手段去优化SQL语句,缩短SQL语句的执行时长。
写在最后
当然Druid的参数也不是一蹴而蹴,主要还是基于应用的特点去有针对性的设置相应的参数,既要防止因为不合理的参数的设置,导致故障时长延长,而不能因为参数的设置过短,而导致业务大量的失败,两者均不可取,需要在这两者中间找到一个想较而然比较均衡的点,同时应该对系统的慢SQL进行监控和及时的优化,确保因为处于一个相对安全可控的状态。
相关推荐
- 3分钟让你的项目支持AI问答模块,完全开源!
-
hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...
- 干货|程序员的副业挂,12个平台分享
-
1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...
- Github标星超200K,这10个可视化面板你知道几个
-
在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...
- 开箱即用的炫酷中后台前端开源框架第二篇
-
#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...
- 搭建React+AntDeign的开发环境和框架
-
搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...
- 基于.NET 5实现的开源通用权限管理平台
-
??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...
- StreamPark - 大数据流计算引擎
-
使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...
- 教你使用UmiJS框架开发React
-
1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...
- 简单在线流程图工具在用例设计中的运用
-
敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...
- 【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单
-
这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...
- 聊聊规则引擎的调研及实现全过程
-
摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...
- 【开源推荐】Diboot 2.0.5 发布,自动化开发助理
-
一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...
- 微软推出Copilot Actions,使用人工智能自动执行重复性任务
-
IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...
- Electron 使用Selenium和WebDriver
-
本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...
- Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具
-
一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)