当前位置:网站首页 > SQL数据库编程 > 正文

pymysql连接池(pymysql连接池多线程)



  前面文章讨论了mysql做高可用的配置,而本文则是开发项目过程需要用的部分,从配置数据库到实用数据库,以及再用SQL做BI分析再到SQL优化,这些都是全栈工程师的基本功。

1、连接池测试mysql默认连接配置

  先出简单的测试连接池或多线程并发的脚本,这里先借用DBUtils创建连接池,文章后面会给出无须借用第三方库也可以实现实用的连接池。

查看mariadb默认设置的最大连接数为151

  运行测试脚本,注意这里是连接池10万个连接的并发,对于server端的mysql来说,也就是同时有200个并发connections,就已经出错了,这就是模拟了客户端多线程大量并发消耗完mysql 最大连接资源引起error

2、高并发连接数据库出错分析与测试

  出现以上情况,可通过设置mysql max_connections最大值,来保证并发量,测试mysql在有限物理资源条件下可达到的最大连接数,随便设一个大值例如,最后可mysql单机可设定的最大连接数为10万

  在这里,使用多线程方式,测试脚本发起10万个线程并发请求,运行后程序很快出现socket请求打满客户端系统缓冲区,导致系统级别出错,如下

再查看服务器响应的最大连接数,成功连接仅有745个

3、为何选用连接池优化连接?

打个不一定恰当的通俗比喻:

有10000辆车同时要从A点到达B点,出发前,A、B之间没有路,需要先搭建

1)多线程方式:需要1000个路面施工队同时搭建完1000条“高速路”后,才能同时出发,可见需要消耗非常多资源(10000个施工队以及10000条高速路资源),等10000辆车到达B点后,10000个施工队又得去拆除10000条高速路,非常耗资源

2)连接池方式(假设连接池大小为1000):需要1000个路面施工队同时搭建完1000条“高速路”后,前面1000辆车到达B点,后面9000辆车出发时,施工队不需要再新建高速路,继续重用前面搭建的1000条“高速路”,极大降低的物理资源浪费。

连接池重要两个逻辑:

  • 在程序创建连接的时候,可以从连接池队列中取出一个空闲的连接,不需要重新初始化连接,提升获取连接的速度
  • 关闭连接的时候,把连接放回存放连接池的队列中,而不是真正的关闭,所以可以减少频繁地打开和关闭tcp通道
4、继续测试两种连接效果
  1. 开启多线程6000个并发,运行出错,6000个线程直接把客户端的系统缓冲区打满,无法继续运行

3)连接池开启6000个并发,连接池最大连接限制3000个,运行没有问题,cost:24.3 s

在mysql也可以看到最大已用连接数为3000个

5 、自行实现简易使用的mysql连接池

  就本文测试的数据库以及简单表结构而言,使用该连接池模块,注意测试之前,需重启mysql,保证数据库最大已连接数为1,也即清空历史残留连接,以便做新测试对比。12000个并发,mysql设定最大可用连接数:3000,单例模式,cost:22.2 s,程序不会出现任何异常,当然因表结构和服务器性能情况而不同。

  这里顺便提下oracle线程池,部分项目使用oracle数据库,cx_Oracle也支持使用连接池方式连接,大致流程如下,也可根据使用习惯封装更适合自身业务需要的模块。

  若使用多线程方式,尤其数量大的情况下(500以上),很容易把底层bug爆出来,cx_Oracle会引发python解释器崩溃。其实建议,只要是连接数据库,所引入的第三方库支持线程池方法的话,都建议用线程池,哪怕你的插入数据不是太频繁或并发量不大,减少程序自身出错,也降低数据库连接压力。

到此这篇pymysql连接池(pymysql连接池多线程)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • sql文件导入sqlserver数据库(.sql文件导入数据库)2025-06-25 11:45:06
  • 数据库表的增删改查(数据库表的增删改查sql语句)2025-06-25 11:45:06
  • goldendb数据库 mysql(goldendb数据库版本查看)2025-06-25 11:45:06
  • 使用pymysql连接数据库(pymysql连接数据库被拒绝)2025-06-25 11:45:06
  • yml文件配置mysql(yml文件配置mybatis)2025-06-25 11:45:06
  • SQL窗口函数速查表(SQL窗口函数速查表 百度网盘)2025-06-25 11:45:06
  • mongodb数据库(mongodb数据库和mysql区别)2025-06-25 11:45:06
  • 达梦数据库执行sql脚本(达梦数据库执行sql文件)2025-06-25 11:45:06
  • msvcp140.dll丢失的解决方法Win7(msvcp140.dll丢失的解决方法 mysql)2025-06-25 11:45:06
  • mysql锁表如何解锁(mysql锁表了)2025-06-25 11:45:06
  • 全屏图片