MySQL连接池

1. 池化技术

如果没有池的话,我们需要多次的创建和释放对象;如果放在池中可以统一的创建和销毁。

池化技术能够减少资源对象的创建次数,提高程序的响应性能,特别是在高并发下这种提高更加明显。

使用池化技术缓存的资源对象有如下共同特点:

  • 对象创建时间长
  • 对象创建需要大量资源
  • 对象创建后可被重复使用

常见的线程池、内存池、连接池、对象池都具有以上的共同特点。

线程池和连接池区别

线程池:主动操作,主动执行任务

连接池:被动操作(类似内存池),池的对象被任务获取,执行完任务后归还

2. 数据库连接池 (MySQL/Redis)

定义:数据库连接池(connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

简单理解:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,更加安全可靠。

  • 不使用连接池

       1) TCP建立连接的三次握手(客户端与MySQL服务器的连接基于TCP协议)

        2)MySQL认证的三次握手

        3)执行sql语句

        4)MySQL关闭

        5)TCP四次握手关闭     

         为了执行一条SQL语句,需要进行很多其他的操作,执行SQL操作在所有操作中占比很低

        优点:实现简单

        缺点:

        网络IO较多;

        带宽利用率低;

        QPS较低;

        应用频繁创建连接和关闭连接,导致临时对象较多,带来更多内存碎片;

        关闭连接后,会出现大量TIME_WAIT的TCP状态          

  • 使用连接池

        获取连接--> 执行sql--> 归还连接

        优点:

        降低了网络开销

        连接复用,有效减少连接数

        提升性能,避免频繁的新建连接。新建连接的开销比较大

        没有TIME_WAIT状态的问题

        缺点:

        设计较为复杂

3. 长连接和连接池的区别

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

4. 数据库连接池运行机制

1)从连接池获取或创建可用连接

2)使用完毕之后,把连接返回给连接池

3)在系统关闭前,断开所有连接并释放连接占用的系统资源

5. 连接池连接设置数量

连接数=(核心数*2)+ 有效磁盘数

此处只是一个经验公式,还要结合线程池数量、具体业务

CPU总核数=物理CPU个数 * 每颗物理CPU的核数

总逻辑CPU数=物理CPU个数*每颗物理CPU的核数*超线程数

其余补充:

1. 如果使用MySQL或MariaDB,不要用“utf8”编码,改用“utf8mb4”。(在mysql中utf8mb4表示的是真正的utf-8编码)

2. top查看CPU使用率,如果超过100,说明该CPU是多核的,top之后按1,可以显示每个CPU的使用率,top里显示的是把每个CPU的使用率加起来

3. CPU补充知识

1)物理CPU

插在主机上能看的见摸得着的那个CPU硬件

2)CPU核数

一块物理CPU上能处理数据的芯片组数量。一个物理CPU上可能会有多个核心,平时所说的2核、4核就是指CPU的核心。

3)逻辑CPU

逻辑CPU的概念比较抽象,简单理解为一个处理单元,总的逻辑CPU数对应总的CPU核数,借助超线程技术,一个核用起来像两个核,这时逻辑CPU数就是核心数的两倍了。

4. 一些查询命令

Linux cut命令 | 菜鸟教程

Linux uniq 命令 | 菜鸟教程

# 查看CPU信息(型号)
parallels@parallels-vm:~$ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
      2  Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz

# 查看物理CPU个数
parallels@parallels-vm:~$ cat /proc/cpuinfo | grep "physical id" | sort | wc -l
2

# 查看每个物理CPU中core的个数(即核数)
parallels@parallels-vm:~$ cat /proc/cpuinfo | grep "cpu cores" | uniq
cpu cores	: 2

# 查看逻辑CPU的个数
parallels@parallels-vm:~$ cat /proc/cpuinfo | grep "processor" | wc -l
2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值