数据库调优-连接池优化

先贴下连接池的相关配置

  • 连接池参数配置:
字段含义
Max Number of Connections最大连接数;做性能测试时,可以填 0 。在开发的项目中按实际代码填写,默认是 20 。
Max Wait(ms)在连接池中取回连接最大等待时间,单位毫秒
Time Between Eviction Runs(ms)线程可空闲时间,单位毫秒如果当前连接池中某个连接在空闲了 time Between Eviction Runs Millis 时间后任然没有使用,则被物理性的关闭掉
Auto Commit自动提交sql语句,如:修改数据库时,自动 commit
Transaction isolation事务隔离级别
Preinit Pool立即初始化连接池如果为 False,则第一个 JDBC 请求的响应时间会较长,因为包含了连接池建立的时间
  • Transaction Isolation: 事务间隔级别设置,主要有如下几个选项:(对JMX加解密)

    • TRANSACTION_NODE 事务节点
    • TRANSACTION_READ_UNCOMMITTED 事务未提交读
    • TRANSACTION_READ_COMMITTED 事务已提交读
    • TRANSACTION_SERIALIZABLE 事务序列化
    • DEFAULT 默认
    • TRANSACTION_REPEATABLE_READ 事务重复读、

看到这,有些小伙伴,可能要溜了,别慌,且听我一一道来!!!上干货,安排。。。

image.png

2.连接池优化

加不加连接池,对当前服务性能产生什么影响?

单个服务也会耗尽连接?

  • 会不会对性能产生影响呢?会扣 1 , 不会扣 2 , 性能会变好扣 3
  • 最大连接数越大是不是性能越好呢?
  • 获取池中连接的最大等待时长?等待时间越短越好呢?

2.1JMeter优化

image.png

看到这里,是不是有点眼熟?

就是刚贴的,连接池参数配置

这里我们先对JMeter进行优化下,字体外观

  • 切换到中文

image.png

找到jmeter.properties文件,添加下面配置:

language=zh_CN

然后重启下JMeter即可。

  • 外观,有黑色改成白色

image.png

2.2 不使用连接池

有什么问题呢?会报错

  • 如果你不是多个应用程序同时连接MySQL,问题不大。但是如果你是多个应用程序连接数据库。
  • 每个应用并发去获取数据库连接,会导致连接耗尽,资源争抢冲突!

这里,我们创建一个计划,去测试下:

image.png

线程数: 20

ramp-up: 1

循环次数: 2000

image.png

  • 执行,查看结果树

image.png

可以看到,当不使用线程池时,很快,就报下面这个错了:

 

php

复制代码

Response message:java.sql.SQLException: Cannot create PoolableConnectionFactory (Data source rejected establishment of connection, message from server: "Too many connections")

  • 查看聚会报告

image.png

2.3 连接池参数设置

压力测试连接池参数设置:

2.3.1 MaxWait

参数表示从连接池获取连接的超时等待时间,单位毫秒。

注意:这个参数只管理获取连接的超时。获取连接等待的直接原因池子里没有可用连接,具体包括如下四种情况:

  • 连接池未初始化
  • 连接长久未使用已被释放,
  • 连接使用中需要新建连接
  • 连接池已耗尽需等待连接用完后归还

这里有一个很关键的点是 maxWait 未配置或者配置为 0 时,表示不设等待超时时间。也就是无限制等待

如果不配置maxWait,后果会怎么样呢?可能有些应用就这么干,来做个案例:

 

properties

复制代码

maxWait=0, maxActive=5,

对应JMeter的配置如下:

image.png

正常流量下业务没有发现任何问题,但突发大流量涌入时,造成连接池耗尽,所有新增的DB请求处于等待获取连接的状态中。

由于 maxWait=0 表示无限等待,在请求速度大于处理速度的情况下等待队列会越排越长,最终业务上的表现就是业务接口大量超时,流量越大造成实际吞吐量反而越低。

线程数 5 :

1658996535095(1).jpg

image.png

异常率:38%

线程数 10 :

image.png

image.png

异常率:50%

线程数 20 :

image.png

image.png

异常率:62%

由上可见,很明显,随着线程数增加,异常率不断增加。

配置建议:如果在内网,网络情况良好的情况下,maxWait应该设置为 800 毫秒。如果在外网,网络状况不佳值可以设置为 1200 毫秒。TCP重连的时间是 1 秒。

image.png

  • 如果MaxWait值很大,会出现高并发情况下,获取不到连接,响应时间变长,吞吐量下降
  • 如果Maxwait值很小,会出现吞吐量奇高,但是异常数也奇高。

重点了,兄弟们。

maxWait,配置,get!!!

2.3.2 MaxActive
 

yaml

复制代码

线程数: 20 ramp-up: 1 循环次数: 2000

最大连接池数量,允许的最大同时使用中的连接数。

注意:配置 maxActive 千万不要好大喜多,虽然配置大了看起来业务流量飙升后还能处理更多的请求,但切换到DB视角会发现其实连接数的增多在很多场景下反而会减低吞吐量,一个非常典型的例子就秒杀,在更新热点数据时DB 需要加锁操作,这个时候再让更多的连接操作DB就有点像假日往高速上涌入的车辆,只会给DB添堵。

最大连接: 10

image-20220727232753636.png

最大连接数: 20

image-20220727232818351.png

最大连接数: 30

image-20220727232841966.png

配置建议:大多数场景下,配置 20 即可,足够使用的!建议结合实际业务场景设置,在业务系统稳定运行一段时间之后,获取稳定连接数,在这个基础之上乘以3-4即可!

为什么最大连接数设置的过多并不是一件好事? 是不是设置的连接数越多,性能就越好呢?不是!

  • 首先,数据库的连接是非常宝贵的资源,很有限?数据库的最大连接数是多少? 151
  • 其次, 20 个连接足以支持到足够的TPS
  • 再次,如果设置最大的连接数过多了,会造成资源争抢。从而出现服务器报错!设置连接过多,没有提升性能反而性能下降
  • 在绝大多数业务场景下, 10 、 20 、 30 都足以支撑!

哈哈,这个参数,很重要喔,不记下来嘛?

image.png

 

csharp

复制代码

# 查看数据库最大支持的连接数 SHOW variables like 'max_connections'; //151 # 查看数据库最大使用的连接数 SHOW variables like 'max_user_connections'; //0

2.4 连接属性设置

之前在配置JDBC的连接池的时候讲过两个参数:serverTimezone=UTC&characterEncoding=utf-8。

接下来再说两个参数在网络方面有很大作用;主要应对在网络异常模式下,数据库无法释放连接的问题;

  1. connectTimeout: 表示等待和MySQL数据库建立socket链接的超时时间。

    • 如果与服务器(这里指数据库)请求建立连接的时间超过ConnectionTimeOut,就会抛连接超时异常,即服务器连接超时。
  2. socketTimeout: 表示客户端和MySQL数据库建立socket后,读写socket时的等待的超时时间

    • 如果与服务器连接成功,就开始数据传输了。如果服务器处理数据用时过长,超过了SocketTimeOut,就会抛出SocketTimeOutExceptin,即服务器响应超时,服务器没有在规定的时间内返回给客户端数据。
 

properties

复制代码

jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC&characterEncoding=utf-8&connectionTimeout=3000&socketTimeout=1200

解释:

  • 一个请求包含三个过程:1.建立连接,2,数据传输,3.断开连接
  • connectTimeout默认值 0 ,你连接超时。
  • socketTimeout默认值,采用Linux操作系统的配置,默认值 30 分钟。

建议配置:connectTimeout 3000,socketTimeout 1200

  下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux 6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 10、开放性测试题,11、安全测试,12、计算机基础

​编辑资料获取方式 :xiaobei_upup,添加时备注“csdn alex”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1419894.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

在 Navicat 17 创建一个数据字典

即将于 5 月 13 日发布的 Navicat 17(英文版)添加了许多令人兴奋的新功能。其中之一就是数据字典工具。它使用一系列 GUI 指导你完成创建专业质量文档的过程,该文档为跨多个服务器平台的数据库中的每个数据元素提供描述。在今天的博客中&…

基于springboot+vue+Mysql的外卖点餐系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

嵌入式基础课程配套电机FOC伺服电机开发板AT32F403磁编码IMU姿态

嵌入式基础课程配套电机FOC伺服电机开发板AT32F403磁编码IMU姿态 带你入门嵌入式有二十多年开发经验的老技骨做技术支持整个开发包硬件包括电机2205,支持12V到24V宽输入,配套12V2A电源。包装原理图和PCB嵌入式软件嵌入式基础课程 带你入门嵌入式 电机FO…

瀚高数据库(HighGoDB)Windows安装使用

1.下载 2.安装 瀚高数据库下载与安装(Windows版)-CSDN博客 3.连接工具 4.建库、建表操作 瀚高数据库管理工具-CSDN博客 *报错Cant access non-default database,需要右键数据库-设为活动对象 5.导入外部数据(迁移、对比&…

多模态CLIP和BLIP

一、CLIP 全称为Contrastive Language-Image Pre-Training用于做图-文匹配,部署在预训练阶段,最终理解为图像分类器。 1.背景 以前进行分类模型时,存在类别固定和训练时要进行标注。因此面对这两个问题提出CLIP,通过这个预训练…

2024年4月12日饿了么春招实习试题【第二题:魔法师】-题目+题解+在线评测【二分】

2024年4月12日饿了么春招实习试题【第二题:魔法师】-题目题解在线评测【二分】 题目描述:输入格式输出格式样例输入样例输出评测数据与规模 解题思路一:解题思路二:解题思路三:动态规划 题目描述: 塔子哥是一名魔法师…

斯坦福李飞飞最新对话:AI不会对人类造成“灭绝性危机” | 最新快讯

美国斯坦福大学教授、美国国家工程院院士李飞飞(来源:斯坦福大学账号) 北京时间 5 月 10 日凌晨举行的 Bloomberg Tech 活动上,著名华人计算机科学家、美国斯坦福大学教授李飞飞(Fei-Fei Li)与彭博社 Emily…

三星硬盘格式化后怎么恢复数据

在数字化时代,硬盘作为数据存储的核心部件,承载着我们的重要文件、照片、视频等资料。然而,不慎的格式化操作可能使我们失去宝贵的数据。面对这样的困境,许多用户可能会感到无助和焦虑。本文旨在为三星硬盘用户提供格式化后的数据…

【计算机网络】数据链路层的功能

数据链路层的基本功能: 封装成帧透明传输差错检测 数据链路层使用的信道主要有两种 点对点信道——PPP协议广播信道——CSMA/CD协议(有线局域网)、CSMA/CA协议(无线局域网) 数据链路层所处的地位 从图中可以看出,数据从主机H1送到主机H2需要在路径中…

【Java探索之旅】继承结构 继承和组合 protected final

文章目录 📑前言一、继承1.1 继承关系的代码块1.2 protected关键字1.3 继承方式1.4 final关键字1.5 继承与组合 🌤️全篇总结 📑前言 在面向对象编程中,继承是一种重要的概念,它允许我们创建一个新类,从现有…

树莓派realVNC分辨率不对

用putty进入树莓派 输入sudo raspi-config 找到第二个 里面有一个VNC resolution好像是这个,可以调节分辨率

有哪些是618必买的数码好物,这几款千万别错过

备受瞩目的618购物节即将拉开帷幕,身为数码领域的资深发烧友,我迫不及待地要为大家呈现一系列精心挑选的数码产品。无论您是热衷于追求科技尖端的先锋者,还是希望用智能设备为生活增添一抹亮色的品味人士,这里总有一款能让您心动的…

如何将一个VPS上的网站全部迁移至另外一个VPS服务器

最近我们老的VPS即将到期,由于近期Hostease的VPS活动力度较大,我们购买了Hostease的VPS,购买后需要将原服务器的所有网站迁移到Hostease提供的VPS中。在Hostease技术人员的帮助下,我们成功进行了迁移,下面我就介绍此次…

Vue常用指令修饰符

指令修饰符 什么是指令修饰符?按键修饰符v-model修饰符事件修饰符 什么是指令修饰符? ​所谓指令修饰符就是通过“.”指明一些指令后缀, 不同的后缀封装了不同的处理操作 —> 简化代码 按键修饰符 keyup.enter —>当点击enter键的时…

用大于meilisearch-java-0.7.0.jar的报错的解决

Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…

【Android】Kotlin学习之Kotlin方法的声明和传参

方法声明 普通类的方法 静态类的方法 不需要构建实例对象, 可以通过类名直接访问静态方法 : NumUtil.double(1) companion object 伴生类的方法 使用companion object 在普通类里定义静态方法 参数 括号内传入方法 : 当参数是方法时, 并且是最后一个参数 , 可以使用括号外…

李宏毅-注意力机制详解

原视频链接:attention 一. 基本问题分析 1. 模型的input 无论是预测视频观看人数还是图像处理,输入都可以看作是一个向量,输出是一个数值或类别。然而,若输入是一系列向量,长度可能会不同,例如把句子里的…

39-5 入侵检测系统(IDS)- 安装配置IDS(注意我没安装成功,阅读需谨慎)

官网:Snort Rules and IDS Software Download 参考: (这位大佬分享了安装包下载链接):https://www.cnblogs.com/taoyuanming/p/12722263.html (安装过程参考这位大佬):Snort 安装与配置(CentOS 7)_centos 7 snort-CSDN博客一、安装 IDS(我这里在 CentOS 7 虚拟机中安…

小红书·电商运营课:小红书开店流程,小红书电商如何运营(18节视频课)

课程目录 第1节课:学习流程以及后续实操流程注意事项 第2节课:小红书店铺类型解析以及开店细节 第3节课:小红书电商运营两种玩法之多品店铺解析 第4节课:小红书电商运营两种玩法之单品店铺解析 第5节课:选品课(多品类类目推荐) 第6节课:选品课(多品类类目推荐) 第7节课:…

CSS 网格布局一行X个排列

<div class"icon-box"><divv-for"(item,index) in icon" :key"index" class"icon"style"cursor: pointer">{{item}}</div></div>.icon-box{display: grid; /**网格布局*/grid-template-columns: r…