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

news2024/10/6 20:27:27

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.coloradmin.cn/o/1659691.html

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

相关文章

图形网络的自适应扩散 笔记

1 Title Adaptive Diffusion in Graph Neural Networks(Jialin Zhao、Yuxiao Dong、Ming Ding、Evgeny Kharlamov、Jie Tang)【NIPS 2021】 2 Conclusion The neighborhood size in GDC is manually tuned for each graph by conductin…

《看漫画学C++》背后的故事5:超人C++

《看漫画学C》是一本以漫画形式介绍C编程语言的书籍。在第1章中,作者大羽老师通过超人的形象来比喻C是C语言的增强版,这种比喻生动形象,易于理解。在漫画中,超人通常拥有超越常人的能力,这可以类比C相对于C语言增加的高…

Vue+OpenLayers7入门到实战:OpenLayers解析通过fetch请求的GeoJson格式数据,并叠加要素文字标注,以行政区划边界为例

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上通过fetch请求geojson数据,然后通过OpenLayers解析为Feature要素叠加到图层上,并且通过动态设置标注方式显示要素属性为文字标注。 本章还是以行政区划边界为例,这个…

何为基差?股指期货的升水和贴水又怎么理解?

基差是一个金融术语,它指的是现货价格和期货价格之间的差额。在股指期货市场中,现货就是指实际的股票指数,而期货则是基于这个指数未来某个时间点的价格预期。基差可以是正的或负的,具体取决于期货价格是高于还是低于现货价格。 1…

vue3 - 图灵

目录 vue3简介整体上认识vue3项目创建Vue3工程使用官方脚手架创建Vue工程[推荐] 主要⼯程结构 数据双向绑定vue2语法的双向绑定简单表单双向绑定复杂表单双向绑定 CompositionAPI替代OptionsAPICompositionAPI简单不带双向绑定写法CompositionAPI简单带双向绑定写法setup简写⽅…

Python实现一个简单的计算器

简单版本 使用 Python 的 Tkinter 模块来实现一个简单的图形化计算器。以下是一个基本的示例代码 示例效果 代码源码 import tkinter as tkdef button_click(number):current entry.get()entry.delete(0, tk.END)entry.insert(0, current str(number))def button_clear():e…

【数据库原理及应用】期末复习汇总高校期末真题试卷11

试卷 一、填空题(每题 1 分,共10 分)    1. 数据库管理技术的发展经历了三个阶段:人工管理阶段,文件系统阶段和__________阶段。 2.实体完整性约束规定__________的取值不能为空值。 3. 计算机系统有三类安全性问题,即_____…

Excel-VBA报错01-解决方法

【已删除的部件:部件/xl/vbaProject.bin。(Visual Basic for Applications(VBA))】 1.问题复现: Win10 ;64位 ;Office Excel 2016 打开带有宏的Excel文件,报错:【已删除的部件:部件/xl/vbaProject.bin。…

SinoDB数据库出现长事务的解决方法

SinoDB数据库出现长事务的具体现象:   长事务会引发逻辑日志耗尽,导致数据库进入叫做“长事务阻塞Blocked:LONGTX”的状态中,数据库服务响应停止。这时候,数据库状态通过onstat – 命令通常有如下提示: Sinoregal Si…

[Kubernetes] 云原生 Istio 介绍

文章目录 1.Istio 介绍2.Istio 特征3.Istio 与服务治理4.Istio与Kubernetes4.1 Istio是Kubernetes的好帮手4.2 Kubernetes是Istio的好基座 5.Istio与服务网格5.1 时代选择服务网格5.2 服务网格选择Istio 1.Istio 介绍 服务网格是一个独立的基础设施层,用来处理服务之…

秋招后端开发面试题 - JVM运行时数据区

目录 运行时数据区前言面试题JVM 内存区域 / 运行时数据区?说一下 JDK1.6、1.7、1.8 内存区域的变化?为什么使用元空间替代永久代作为方法区的实现?Java 堆的内存分区了解吗?运行时常量池?字符串常量池了解吗&#xff…

记录一次linux服务器被留后门如何清退

怎么确定自己的服务器有后门 第一个确定服务存在后门的情况有很多种 可以在网上安装一些免费开源的病毒查杀软件有一个正常的服务器,进行敏感文件对比,当然这里也有一些不落地木马服务器莫名占用虚高使用top、ps、htop来监控可以进程采用端口扫描的情况…

二、使用插件一键安装HybirdCLR

预告 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 热更方案 基于HybirdCLR HybridCLR是一个特性完整、零成…

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

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

QJ71E71-100 三菱Q系列以太网通信模块

QJ71E71-100 三菱Q系列以太网通信模块 QJ71E71-100以太网模块是PLC侧连接Q系列PLC与本站系统的接口模块,如个人计算机和工作站,也是通过以太网使用TCP/IP或UDP/IP通讯协议在 PLC 之间的接口模块。QJ71E71-100外部连接,QJ71E71-100参数规格,QJ71E71-100用…

2024年最新 Counter-Strike 2 常用控制台命令

如何打开CS2控制台 以下是如何在游戏中轻松打开 Counter-Strike 2 控制台的方法: 启动 CS2 并单击齿轮图标以打开“设置”。单击顶部的“游戏”选项卡。将“启用开发者控制台”下拉菜单设置为“是”。关闭“设置”菜单。按键盘上的 (~) 或 () 打开 CS2 控制台。 控…

05、Kafka 操作命令

05、Kafka 操作命令 1、主题命令 (1)创建主题 kafka-topics.sh --create --bootstrap-server 192.168.135.132:9092,192.168.135.133:9092,192.168.135.134:9092 --topic test1 --partitions 4 --replication-factor 3–bootstrap-server:…

WordPress插件:链接自动识别转为超链接

WordPress插件&#xff1a;链接自动识别转为超链接 <?phpfunction open_links_in_new_tab() {add_filter(the_content, make_clickable);function autoblank($text) {$return str_replace(<a, <a target"_blank", $text);return $return;}add_filter(th…

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

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

H5 云商城 file.php 文件上传致RCE漏洞复现

0x01 产品简介 H5 云商城是一个基于 H5 技术的电子商务平台,旨在为用户提供方便快捷的在线购物体验。多平台适配:H5 云商城采用 H5 技术开发,具有良好的跨平台适配性。无论是在电脑、手机还是平板等设备上,用户都可以通过网页浏览器访问和使用云商城,无需安装额外的应用程…