文档章节

连接池原理简述

蒋先生66
 蒋先生66
发布于 04/11 16:09
字数 802
阅读 17
收藏 0

概述

数据库连接池的原理,跟线程池一样都是通过重用资源来提升性能。(线程池重用的是线程资源,连接池重用的是连接,避免连接频繁的创建和销毁,减少了cpu,内存,网络开销),本文主要简单讲述连接池的原理。

数据库连接的生命周期

让我看看连接一次数据库要经历哪些步骤

  1. 用 database driver 打开一个连接去连接数据库
  2. 打开一个 TCP socket 读写数据
  3. 数据读写完毕
  4. 关闭连接
  5. 关闭socket

可以看出进行一次数据库连接是个相当昂贵的操作。

没有连接池的情况

图片来自博客 https://blog.csdn.net/shuaihj/article/details/14223015

如上图,如果没有连接池,这时候应用有15万个并发用户操作(包括读写)那么就会创建很多连接到数据库,这样频繁的创建连接又销毁即浪费了cpu,内存资源,又会造成数据库连接过多而报错。(MySQL 5.7 最大连接数 是 10万,默认是 151)

有连接池的情况

图片来自博客 https://blog.csdn.net/shuaihj/article/details/14223015

如上图,假设连接池最大连接数是 200 ,现在程序有 15万 个并发sql操作(包括读写,相当于某个电商促销活动,有15万人在线操作,这个量级(阿里,唯品会等)很容易达到),这个时候,他们就会轮换使用这 200 个连接来执行sql,这样连接池和数据库的连接最多200个, 不会创建过多连接。这样使用连接池即减少了连接频繁地创建和销毁,又避免了过多连接打垮数据库,并且每次创建销毁一个连接大概 0.05s~1s(MySQL) ,相当于每个sql操作都多几十到几百毫秒,这很明显是没对的。

连接池配置注意事项

  • spring boot 默认的 hikariCP 连接池,默认的 最小连接数是 10,即启动就会创建10个连接,并且在服务器端占用10个连接。

了解连接池原理的好处

  • 懂得如何配置最大连接数了(不要超过数据库最大连接数,当然也不是越大越好,最大连接数一般跟最大线程池数一样,设置成 cpu核心数*2 就行了,具体参考 https://blog.csdn.net/w05980598/article/details/78797310/ 文章)
  • 知道了资源池设计模式:即资源池设计模式是用来解决资源频繁创建和销毁带来的浪费问题。比如数据库连接池, 线程池等等。后续遇到同样场景的问题,就可以用此设计模式来解决。

参考

https://blog.csdn.net/shuaihj/article/details/14223015

© 著作权归作者所有

蒋先生66
粉丝 14
博文 20
码字总数 9301
作品 0
成都
程序员
私信 提问
知识点

蓝厂: 1.事件分发流程 2.View的渲染机制 3.动画的原理,底层如何给上层信号 编译打包的过程 5.Android有多个资源文件夹,应用在不同分辨率下是如何查找对应文件夹下的资源的,描述整个过程 ...

咖喱配胡椒
2017/10/10
0
0
2019年阿里Java面试必问:JVM与性能优化+Redis+设计模式+分布式

前言 一年之计在于春 金三银四已经要到来,2019的新的开始,作为一个开发人员,你是否面上了自己理想的公司,薪资达到心中理想的高度? 面试:如果不准备充分的面试,完全是浪费时间,更是对...

java知识分子
02/18
698
0
ODBC对象-Environment

简述 Environment对象,是ODBC的顶层对象,包含了全局的环境参数。 是创建其他数据库对象的先决条件,在使用ODBC访问数据库前,必须首先创建一个Environment对象。 Environment对象创建和释放...

先进哥
2014/01/06
193
0
运维人员笔试题[李宝财]

1:请简述lvs的三种工作方式,以及其特点和区别? 2:请描述一下lvs的端口亲缘性,以及可持久性连接? 3:请简述一下linux下常用入侵检测和审计系统(audit属于哪个原理上简述一下)? 4:请谈一下目前常...

多厘
2015/04/02
4
0
数据库路由中间件MyCat - 源代码篇(9)

此文已由作者张镐薪授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 3. 连接模块 3.5 后端连接 3.5.1 后端连接获取与负载均衡 上一节我们讲了后端连接的基本建立和...

网易云
2018/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
161
8
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
18
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
11
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部