探案录 | KingbaseES+SqlSugar为医疗用户排忧解难

66e8e68733f1ca6b2284ccb1e1c56de9.jpeg

在2024年的初春,某大型三甲医院的CT预约系统上线测试,如同新芽破土,充满了希望与活力。然而,仅仅两天后,一个技术难题如同迷雾中的幽灵,悄然出现:The connection pool has been exhausted……

福尔摩斯K,如同猎犬般敏锐,迅速投入了这场技术探案。

 #第一章:迷雾初现 

“华生,我们必须首先排除高并发的可能性。”福尔摩斯K开始对业务系统进行梳理。

他发现,错误是业务系统报出的,业务系统处理第三方消息平台发送的请求,第三方消息平台收集签到机和其它设备发送的请求。业务系统高峰期时,同时请求的请求可以达到10条左右。并发量并不大,排除并发量导致的连接池爆池。

14847112ee4a7bff9c765676b2d393fc.jpeg

#第二章:数字的线索 

福尔摩斯K转而查询K家族自主研发的KingbaseES系统表sys_stat_activity,记录了每个连接的信息。

他发现,KingbaseES通过精心设计的查询语句,每隔一秒,如同钟表的滴答声,记录下了对应业务的数据库连接数。在业务量最大时,连接数竟达到了800个,大多数连接状态为“Idle in transaction”,如同悬而未决的谜团。

4b7d2ba27dd906baaceb02a3bf8e209f.jpeg

#第三章:连接池的秘密 

之后,福尔摩斯K对KingbaseES驱动的kdbndp连接池机制进行了深入的分析。

在他看来,连接池的三个计数器——空闲连接计数器Idle、正在使用连接计数器Busy和等待获取连接对象计数器Waiting——如同三重奏,共同维持着连接池的和谐。

然而,现场问题中存在大量创建物理连接的现象,将连接池撑爆,这与连接池的设计机制不符,也许这就是破案的关键。

01

连接池中无连接-申请连接流程

0f6edbed086515d46e6ffc0465090b66.png

02

连接池已经存在连接-申请连接流程

eb9fdf6e8dc43abbdd1a50f248de7cd0.png

03

连接池释放连接—应用退出

fadced9c154654541178161c2c9c9f75.png

04

连接池释放连接—连接空闲达到设置时间(默认5分钟)

cda3c0e38794077e8d01005070ef17ca.png

05

连接池满-处理流程

d9eef78a891e613d6c85d52540db3107.png

06

连接池参数介绍

Pooling

是否开启连接池,true:开发连接池,false:关闭连接池,默认值:true

Minimum Pool Size

连接池保持最小连接数,默认值:0

Maximum Pool Size

连接池可以创建连接额最大数,默认值:100

Connection Idle Lifetime

空闲连接空闲时间达到的时间值,到达该时间值时,可以回收该连接,默认值:300(秒)

Connection Pruning Interval

空闲连接回收之前等待时间,默认值:10(秒)

分析后得知,从连接池设计的机制来看,一般连接使用结束之后,是释放回到连接池中;而现场问题中存在大量创建物理连接,将连接池撑爆的现象存在。

大量物理连接的状态为:

Idle in transcation

至此,福尔摩斯K找到了导致连接池爆池的原因。

ca9d301cb82236b61c3bd7510c3ebc02.jpeg

#第四章:事务的幽灵

“华生,我们需要关注这些‘Idle in transaction’的连接。”福尔摩斯K认为,当数据连接处于此状态时,意味着连接已经开启了事务,但没有任何操作来结束这个事务。

他们进一步梳理了KingbaseES+SqlSugar框架的结构图,试图定位问题。

KingbaseES+SqlSugar

6fdd048267e7f46cd6d1a2bc0d6b9ab1.png

e8fd69ec2cd5d964d24554961d07c1c1.png

业务流程访问数据库的数据经过了如下步骤:

1> 定义实体数据模型,实体模型模型是编写程序的依据;

2>业务系统调用SqlSugar接口,创建对象时,业务代码编写人员可以指定使用SqlSugar的模式,推荐使用的是单例模式SqlSugarScope,该模式是线程安全的。在创建对象的时候,通过DbType指定访问的数据库是哪一家的。Kdbndp中有一个参数DbModeType,指定使用哪种数据库模式,两者有异曲同工之妙;这个时候,我们也指定了我们访问的数据库,访问数据库使用的连接参数等信息;

3>还是调用SqlSugar接口,SqlSugar会将对应接口的操作,映射、翻译为对应的sql语句,调用Kdbndp的执行接口,将语句发送到服务器端;

4>服务器端执行之后,执行结果又通过Kdbndp的功能接口,回到SqlSugar,根据映射关系,将结果存放至模型对象中,业务系统通过获取模型对象中的数据,完成业务数据展示的处理流程。

上述流程步骤二中,创建单例模式的访问对象,引起了福尔摩斯K和华生的关注。福尔摩斯K对华生说:“我觉得我们需要梳理一下SqlSugar创建单例模式时,整个的创建使用流程。”

华生立刻给出了流程图:

bd7ec99b835892451981f0a7352fc68f.jpeg

K家族

不一般

2542ad4ea8fb02d4d47394bf8309ab30.gif

ac824eb4e4b21c506654ff6a3e7f7412.png

#第五章:单例模式的陷阱 

在SqlSugar创建单例模式的过程中,福尔摩斯K发现了关键的线索。果然是在开启事物之后,调用完成退出时没有做commit操作,导致Kdbndp连接无法回到连接池,无法循环使用连接池中连接而导致爆池。

26a95849729bef4cc59db43565344336.jpeg

#第六章:迷雾散去 

福尔摩斯k说:“调用BeginTran(),完成业务逻辑退出时,必须调用CommitTran()来完成连接的释放。”用户在完成业务逻辑退出时,调用了CommitTran()。

经过调整,连接池中的物理连接保持在20个左右,爆池的错误不再出现。服务器端相关资源消耗大幅下降,每次任务的提交速度显著提升。这场技术探案,如同解开了一道复杂的密码,终于迎来了曙光。

#第七章:搭子的力量 

案件水落石出后,华生发现了KingbaseES+SqlSugar的方案在实际业务中有不少优点,比如说:

1

屏蔽数据库模式的差异,业务根本不用关心我连接的是金仓的什么数据库模式,因为驱动和框架已经做了屏蔽了差异,让业务编写更容易迁移;

2

业务开发和迁移的高效性,驱动和框架做了兼容开发,只是通过连接串的不同,就能实现不同数据库之间的业务迁移,太方便了;

3

实时的技术支持,可以快速定位问题,并解决问题。

福尔摩斯k点点头,表示认可,并补充到:“你忘了说KingbaseES较为全面的兼容能力,目前兼容了PostgreSQL、Oracle、MySQL、SQL Server等数据库的核心功能。这在业界是极具独创性的。”

这一次

福尔摩斯K更接近K家族的核心技术了

欢迎大家持续关注

揭开K家族的神秘面纱

9c70eb98bd634b8d9ac21843295b95e5.png供稿:产品研发中心、战略市场部

编辑:王堇

审核:日尧

7106ada7d7f0212cdc6ac42d31235de1.gif

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三相两电平逆变器的Simulink仿真建模及SPWM

三相两电平逆变器的介绍 三相两电平逆变器的电路结构如下图所示,作为非常基本的电力电子电路,众多教科书中均有对该电路的原理介绍,本文不再对原理进行赘述,主要目的在于提供simulink仿真电路。下图即为三相两电平逆变器电路结构…

图文并茂:解析Spring Boot Controller返回图片的三种方式

欢迎来到我的博客,代码的世界里,每一行都是一个故事 图文并茂:解析Spring Boot Controller返回图片的三种方式 前言使用Base64编码返回图片使用byte数组返回图片使用Resource对象返回图片图片格式转换与性能对比 前言 在互联网的世界里&…

AI雷达智能销售名片小程序源码系统+企业商城+公司动态 带完整的安装代码包以及安装搭建教程

在数字化时代,企业的销售模式正在经历一场深刻的变革。为了更好地满足市场需求,提升销售效率,罗峰给大家分享一款集AI雷达智能销售名片、企业商城、公司动态于一体的源码系统。该系统不仅配备了完整的安装代码包,还附有详细的安装…

批量自定义重命名,一键添加顺序编号,文件夹管理更高效!

我们经常需要对文件夹进行管理和整理。然而,当面对大量需要改名的文件夹时,手动逐个修改不仅效率低下,还容易出错。那么,有没有一种方法能够批量自定义重命名文件夹,并在名称后自动添加顺序编号呢?答案是肯…

ABC352编程笔记

ABC352 编程笔记 题意&#xff1a;输入&#xff0c;四个数 a , b , c , d a,b,c,d a,b,c,d&#xff0c;若 d d d 在 c , d c,d c,d 之间&#xff0c;则输出 Yes&#xff0c;否则输出 No。 正解&#xff1a;直接判断。 #include <bits/stdc.h> //#define int long lo…

vscode正则匹配技巧

写正则表达式 下面是匹配加粗的单词或空格 \*\*[a-zA-Z\s]*\*\*vscode提取加粗的内容 altenter&#xff0c;再ctrlC复制选中的内容出来

DDD面试题:DDD聚合和表的对应关系是什么 ?(来自蚂蚁面试)

尼恩说在前面&#xff1a; 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如字节、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; DDD 的外部接口调用&#xff0c;应该放在…

深入了解二叉搜索树:原理、操作与应用

文章目录 二叉搜索树二叉搜索树的操作1.查找操作2.插入操作3.查找最大值或者最小值4.删除操作5.前序中序后序遍历 总结 二叉搜索树 形如上图的二叉树就是二叉搜索树&#xff0c;接下来我们来具体阐述一下什么是二叉搜索树。 二叉搜索树的概念&#xff1a;满足左子树的值小于根…

经济学SSCI期刊,中科院3区,IF=2+,难度不大,收稿范围广泛!

一、期刊名称 Information Economics and Policy 二、期刊简介概况 期刊类型&#xff1a;SSCI 学科领域&#xff1a;经济学 影响因子&#xff1a;2.8 中科院分区&#xff1a;3区 出版方式&#xff1a;订阅模式/开放出版 版面费&#xff1a;选择开放出版需支付$3190 三、…

C++ | Leetcode C++题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> t;vector<vector<int>> ans;void dfs(int cur, vector<int>& nums) {if (cur nums.size()) {ans.push_back(t);return;}t.push_back(nums[cur]);dfs(cur 1, nums);t.po…

yum仓库和NFS网络共享服务

一、yum 1.1yum的定义 yum是一个基于RPM包&#xff0c;构建的软件更新机制&#xff0c;能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势&#xff0c;所以在安装操作系统的时…

Docker与Harbor:构建企业级私有Docker镜像仓库

目录 引言 一、本地私有仓库 &#xff08;一&#xff09;基本概述 &#xff08;二&#xff09;搭建本地私有仓库 1.下载registry镜像 2.启动容器 3.上传本地镜像 4.客户端下载镜像 二、Harbor简介 &#xff08;一&#xff09;什么是 Harbor &#xff08;二&#xff…

苹果15能用哪些充电宝?充电宝什么牌子好?好用充电宝排名

随着移动设备的普及和功能的不断强大&#xff0c;我们对于充电宝的需求也越来越高。尤其是对于苹果15用户来说&#xff0c;选择一款兼容性好、性能稳定的充电宝显得尤为重要。在市面上众多充电宝品牌中&#xff0c;如何选择适合苹果15的充电宝&#xff1f;究竟哪个牌子的充电宝…

在线扭蛋机小程序:商家稳占市场的新突破口

近几年&#xff0c;扭蛋机进入了爆发期&#xff0c;动漫、游戏的发展更是推动了市场的发展&#xff0c;我国扭蛋机正在蓬勃发展中。 不过&#xff0c;在市场规模扩大下&#xff0c;扭蛋机行业的竞争力也在同时加大&#xff0c;企业商家需要在市场竞争中寻求发展新思路&#xf…

C#进阶-OleDb操作Excel和数据库

在C#编程中&#xff0c;使用OleDb可以方便地实现对Excel文件和数据库的操作。本文探讨了在C#中使用OleDb技术操作Excel和数据库的策略。文章详述了OleDb的定义、配置环境的步骤&#xff0c;并通过实际代码示例演示了如何高效读写Excel文件和交互数据库。文中还评估了OleDb技术的…

KaiwuDB 参编的《分析型数据库技术要求》标准正式发布

近期&#xff0c;中国电子工业标准化技术协会正式发布团体标准《分析型数据库技术要求》&#xff08;项目号&#xff1a;T-CESA 2023-006&#xff09;。该标准由中国电子技术标准化研究院、KaiwuDB&#xff08;上海沄熹科技有限公司&#xff09; 等国内 16 家企业联合起草&…

AI图书推荐:给自媒体创作者的ChatGPT使用指南

你是否厌倦了花费数小时盯着空白屏幕&#xff0c;努力为你的内容想出新鲜点子&#xff1f;想要将你的写作提升到下一个水平&#xff1f;有了ChatGPT&#xff0c;你可以告别写作障碍、无休止的修订和浪费的时间。 在这本全面的指南中&#xff0c;你将学到关于ChatGPT你需要知道…

Hive两代命令行客户端(Hive、Beeline)

Hive命令行客户端 Hive有两个主要的客户端工具&#xff0c;分别是旧版的Hive CLI&#xff08;Command Line Interface&#xff09;和新版的Beeline。 1. Hive CLI&#xff1a; Hive CLI 是 Hive 最早期的命令行客户端工具&#xff0c;它使用 JDBC 连接到 Hive 服务器&#xff…

轻松管理文件夹批量重命名:学会用关键词批量替换文件夹名称技巧

随着计算机中存储的文件和文件夹数量不断增加&#xff0c;如何有效地管理和组织它们变得尤为重要。批量重命名文件夹是提升文件管理效率的关键步骤之一。而利用云炫文件管理器中关键词批量替换文件夹名称的技巧&#xff0c;则可以帮助我们更快速地完成这一任务。 关键词批量替…

国内首发 | CSA大中华区启动《AI安全产业图谱(2024)》调研

在人工智能&#xff08;AI&#xff09;技术的快速发展浪潮中&#xff0c;AI安全已成为全球关注的焦点。为应对AI安全带来的挑战&#xff0c;确保AI技术的健康发展&#xff0c;全球范围内的研究机构、企业和技术社区都在积极探索解决方案。 在这一背景下&#xff0c;CSA大中华区…