KingbaseES数据库:KingbaseES+SqlSugar 为医疗用户排忧解难

KingbaseES数据库:KingbaseES+SqlSugar 为医疗用户排忧解难

KingbaseES数据库:KingbaseES+SqlSugar 为医疗用户排忧解难

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

前言

    中电科金仓(北京)科技股份有限公司(以下简称“电科金仓”)成立于1999年,是成立最早的拥有自主知识产权的国产数据库企业,也是中国电子科技集团(CETC)成员企业。电科金仓以“提供卓越的数据库产品助力企业级应用高质量发展”为使命,致力于“成为世界卓越的数据库产品与服务提供商”。

    电科金仓自成立起始终坚持自主创新,专注数据库领域二十余载,具备出色的数据库产品研发及服务能力,核心产品金仓数据库管理系统KingbaseES(简称“KES”)是面向全行业、全客户关键应用的企业级大型通用数据库。KES产品V9版本已通过国家权威机构认证,产品核心源代码自主率达到100%。2018年,电科金仓申报的“数据库管理系统核心技术的创新与金仓数据库产业化”项目荣获国家科学技术进步二等奖。金仓数据库管理系统KES于2022年入选国务院国资委发布的十项国有企业数字技术典型成果,彰显数据库领域国家队硬实力。继2023年金仓数据库管理系统V8通过第一批《安全可靠测评》后,2024年金仓数据库管理系统V9、金仓分布式HTAP数据库软件集群V3再度入围,至此电科金仓共计2款产品3个版本通过《安全可靠测评》*。


🥇 点击进入金仓数据库专栏,本专栏聚焦金仓数据库(KingbaseES)这一国产企业级融合数据库,为开发者及技术决策者提供从基础操作到架构设计的系统化学习路径。从多语法兼容(Oracle/MySQL/PostgreSQL)、多模数据存储(关系 / 文档 / 时序 / GIS)等功能展开讲解!


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

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

第一章:迷雾初现

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

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

第二章:数字的线索

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

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

第三章:连接池的秘密

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

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

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

连接池核心机制
  1. 连接池中无连接-申请连接流程:连接池中没有连接时,创建物理连接,连接池中计数+1,busy+1
  2. 连接池已经存在连接-申请连接流程:连接池中有空闲连接,返回空闲连接;没有空闲连接,创建新的物理连接,连接池中的连接计数+1,busy计数+1
  3. 连接池释放连接—应用退出:应用程序断开连接,物理连接释放
  4. 连接池释放连接—连接空闲达到设置时间(默认5分钟):空闲连接达到5分钟,关闭空闲连接。空闲时间用户可指定。驱动通过定时任务来计算连接空闲时长是否达到设置值
  5. 连接池满-处理流程:连接池中的连接达到设置的上限,会进入等待堆栈中;如果堆栈中的等待任务超过设置的连接超时时间,报错退出
  6. 连接池参数介绍:
    • Pooling:是否开启连接池,true:开发连接池,false:关闭连接池,默认值:true
    • Minimum Pool Size:连接池保持最小连接数,默认值:0
    • Maximum Pool Size:连接池可以创建连接额最大数,默认值:100
    • Connection Idle Lifetime:空闲连接空闲时间达到的时间值,到达该时间值时,可以回收该连接,默认值:300(秒)
    • Connection Pruning Interval:空闲连接回收之前等待时间,默认值:10(秒)

分析后得知,从连接池设计的机制来看,一般连接使用结束之后,是释放回到连接池中;而现场问题中存在大量创建物理连接,将连接池撑爆的现象存在。大量物理连接的状态为:Idle in transcation。至此,福尔摩斯K找到了导致连接池爆池的原因。

第四章:事务的幽灵

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

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

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

  1. 定义实体数据模型,实体模型模型是编写程序的依据;
  2. 业务系统调用SqlSugar接口,创建对象时,业务代码编写人员可以指定使用SqlSugar的模式,推荐使用的是单例模式SqlSugarScope,该模式是线程安全的。在创建对象的时候,通过DbType指定访问的数据库是哪一家的。Kdbndp中有一个参数DbModeType,指定使用哪种数据库模式,两者有异曲同工之妙;这个时候,我们也指定了我们访问的数据库,访问数据库使用的连接参数等信息;
  3. 还是调用SqlSugar接口,SqlSugar会将对应接口的操作,映射、翻译为对应的sql语句,调用Kdbndp的执行接口,将语句发送到服务器端;
  4. 服务器端执行之后,执行结果又通过Kdbndp的功能接口,回到SqlSugar,根据映射关系,将结果存放至模型对象中,业务系统通过获取模型对象中的数据,完成业务数据展示的处理流程。

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

第五章:单例模式的陷阱

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

第六章:迷雾散去

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

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

第七章:搭子的力量

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

  1. 屏蔽数据库模式的差异,业务根本不用关心我连接的是金仓的什么数据库模式,因为驱动和框架已经做了屏蔽了差异,让业务编写更容易迁移;
  2. 业务开发和迁移的高效性,驱动和框架做了兼容开发,只是通过连接串的不同,就能实现不同数据库之间的业务迁移,太方便了;
  3. 实时的技术支持,可以快速定位问题,并解决问题。

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

这一次,福尔摩斯K更接近K家族的核心技术了。

联系博主

    xcLeigh 博主全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

    亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

     愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

    至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


     💞 关注博主 🌀 带你实现畅游前后端!

     🥇 从零到一学习Python 🌀 带你玩转Python技术流!

     🏆 人工智能学习合集 🌀 搭配实例教程与实战案例,帮你构建完整 AI 知识体系

     💦 :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://xcleigh.blog.csdn.***/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

转载请说明出处内容投诉
CSS教程网 » KingbaseES数据库:KingbaseES+SqlSugar 为医疗用户排忧解难

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买