面试官问你:为什么频繁连接MySQL数据库会消耗很多资源?
开发应用程序久了总想刨根问底尤其对一些有公共答案的问题。大家都能解释但是追根究底都解释不清。凡是都有为什么而且用数字说明问题是最直观的。本文主要想探究一下连接数据库的细节尤其是在 Web 应用中要使用数据库来连接池以免每次发送一次请求就重新建立一次连接。对于这个问题答案都是一致的建立数据库连接很耗时但是这个耗时是都多少呢又是分别在哪些方面产生的耗时呢分析本文以连接 MySQL 数据库为例因为 MySQL 数据库是开源的其通信协议是公开的所以我们能够详细分析建立连接的整个过程。在本文中消耗资源的分析主要集中在网络上当然资源也包括内存、CPU 等计算资源使用的编程语言是 Java但是不排除编程语言也会有一定的影响。首先先看一下连接数据库的 Java 代码如下Class.forName(com.mysql.jdbc.Driver); String name shine_user; String password 123; String url jdbc:mysql://172.16.100.131:3306/clever_mg_test; Connection conn DriverManager.getConnection(url, name, password); // 之后程序终止连接被强制关闭然后通过「Wireshark」分析整个连接的建立过程如下在上图中显示的连接过程中可以看出 MySQL 的通信协议是基于 TCP 传输协议的而且该协议是二进制协议不是类似于 HTTP 的文本协议。其中建立连接的过程具体如下第 1 步建立 TCP 连接通过三次握手实现。第 2 步服务器发送给客户端「握手信息」客户端响应该握手消息。第 3 步客户端「发送认证包」用于用户验证验证成功后服务器返回 OK 响应之后开始执行命令。用户验证成功之后会进行一些连接变量的设置比如字符集、是否自动提交事务等其间会有多次数据的交互。完成了这些步骤后才会执行真正的数据查询和更新等操作。在本文的测试中只用了 5 行代码来建立连接但是并没有通过该连接去执行任何操作所以在程序执行完毕之后连接不是通过 Connection.close() 关闭的而是由于程序执行完毕导致进程终止造成与数据库的连接异常关闭所以最后会出现 TCP 的 RST 报文。在这个最简单的代码中没有设置任何额外的连接属性所以在设置属性上占用的时间可以认为是最少的其实虽然我们没有设置任何属性但是驱动仍然设置了字符集、事务自动提交等这取决于具体的驱动实现所以整个连接所使用的时间可以认为是最少的。但从统计信息中可以看出在不包括最后 TCP 的 RST 报文时因为该报文不需要服务器返回任何响应但是其中仍需在客户端和服务器之间进行往返「7」次「也就是说完成一次连接可以认为数据在客户端和服务器之间需要至少往返 7 次」。从时间上来看从开始 TCP 的三次握手到最终连接强制断开为止不包括最后的 RST 报文总共花费了10.416042 - 10.190799 0.225243s 225.243ms这意味着建立一次数据库连接需要 225ms而这还是还可以认为是最少的当然「花费的时间可能受到网络状况、数据库服务器性能以及应用代码是否高效的影响」但是这里只是一个最简单的例子已经足够说明问题了由于上面是程序异常终止了但是在正常的应用程序中连接的关闭一般都是通过 Connection.close() 完成的。代码如下Class.forName(com.mysql.jdbc.Driver); String name shine_user; String password 123; String url jdbc:mysql://172.16.100.131:3306/clever_mg_test; Connection conn DriverManager.getConnection(url, name, password); conn.close();这样的话情况发生了变化主要体现在与数据库连接的断开如上图第 1 步此时处于 MySQL 通信协议阶段客户端发送关闭连接请求而且不用等待服务端的响应。第 2 步TCP 断开连接4 次挥手完成连接断开。这里是完整地完成了从数据库连接的建立到关闭整个过程花费了747.284311 - 747.100954 0.183357s 183.357ms这里可能也有网络状况的影响比上述的 225ms 少了但是也几乎达到了 200ms 的级别。那么问题来了想象一下这个场景对于一个日活 2 万的网站来说假设每个用户只会发送 5 个请求那么一天就是 10 万个请求。对于建立数据库连接我们保守一点计算为 150ms 好了那么一天当中花费在建立数据库连接的时间有还不包括执行查询和更新操作100000 * 150ms 15000000ms 15000s 250min 4.17h也就说每天花费在建立数据库连接上的时间已经达到「4 个小时」所以说数据库连接池是必须的嘛。而且当日活增加时单单使用数据库连接池也不能完全保证你的服务能够正常运行还需要考虑其他的解决方案。例如缓存SQL 的预编译负载均衡……总结当然这不是本文的主要内容本文想要阐述的核心思想只有一个数据库连接真的很耗时所以不要频繁的建立连接。感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

相关新闻

根据数据,6款AI工具在论文创作和文本降重上展现双重优势

根据数据,6款AI工具在论文创作和文本降重上展现双重优势

针对学术论文写作需求,目前市场上有多种AI工具可同时满足写作辅助与降重需求。这些智能平台通过自然语言处理技术提供论文框架生成、内容优化以及相似度检测功能,适用于毕业论文撰写、课程报告整理等场景。值得注意的是,此类工具应作为效率提…

2026/7/6 3:38:07 阅读更多 →
解决MyBatis-Plus兼容性问题:从报错到修复的完整指南

解决MyBatis-Plus兼容性问题:从报错到修复的完整指南

解决MyBatis-Plus兼容性问题:从报错到修复的完整指南 【免费下载链接】mybatis-plus mybatis 增强工具包,简化 CRUD 操作。 文档 http://baomidou.com 低代码组件库 http://aizuda.com 项目地址: https://gitcode.com/baomidou/mybatis-plus 在Sp…

2026/7/3 17:11:09 阅读更多 →
OpCore Simplify智能EFI构建工具完全指南:从硬件检测到系统优化的进阶之路

OpCore Simplify智能EFI构建工具完全指南:从硬件检测到系统优化的进阶之路

OpCore Simplify智能EFI构建工具完全指南:从硬件检测到系统优化的进阶之路 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplif…

2026/7/6 15:21:20 阅读更多 →

最新新闻

MegaDepth环境配置与依赖安装:Python 2.7到3.x迁移完整解决方案

MegaDepth环境配置与依赖安装:Python 2.7到3.x迁移完整解决方案

MegaDepth环境配置与依赖安装:Python 2.7到3.x迁移完整解决方案 【免费下载链接】MegaDepth Code of single-view depth prediction algorithm on Internet Photos described in "MegaDepth: Learning Single-View Depth Prediction from Internet Photos, Z. …

2026/7/6 16:13:28 阅读更多 →
Real-ESRGAN实战指南:让模糊图片秒变高清的神奇AI工具

Real-ESRGAN实战指南:让模糊图片秒变高清的神奇AI工具

Real-ESRGAN实战指南:让模糊图片秒变高清的神奇AI工具 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN 你是否曾经为模…

2026/7/6 16:13:28 阅读更多 →
终极Swift异步方案:AwaitKit中async/await关键字详解

终极Swift异步方案:AwaitKit中async/await关键字详解

终极Swift异步方案:AwaitKit中async/await关键字详解 【免费下载链接】AwaitKit The ES8 Async/Await control flow for Swift 项目地址: https://gitcode.com/gh_mirrors/aw/AwaitKit 还在为Swift异步编程的回调地狱而烦恼吗?😫 想要…

2026/7/6 16:11:25 阅读更多 →
揭秘BNB Smart Chain创世合约:10大核心组件工作原理与交互机制

揭秘BNB Smart Chain创世合约:10大核心组件工作原理与交互机制

揭秘BNB Smart Chain创世合约:10大核心组件工作原理与交互机制 【免费下载链接】bsc-genesis-contract The genesis contracts of BNB Smart Chain. 项目地址: https://gitcode.com/gh_mirrors/bs/bsc-genesis-contract BNB Smart Chain创世合约是BNB智能链生…

2026/7/6 16:11:25 阅读更多 →
mark-sweep垃圾收集器性能调优与基准测试终极指南

mark-sweep垃圾收集器性能调优与基准测试终极指南

mark-sweep垃圾收集器性能调优与基准测试终极指南 【免费下载链接】mark-sweep A simple mark-sweep garbage collector in C 项目地址: https://gitcode.com/gh_mirrors/ma/mark-sweep mark-sweep垃圾收集器作为最简单的垃圾回收算法之一,在内存管理和性能优…

2026/7/6 16:09:18 阅读更多 →
5步解锁加密视频:res-downloader让全网资源一键下载

5步解锁加密视频:res-downloader让全网资源一键下载

5步解锁加密视频:res-downloader让全网资源一键下载 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否经常遇…

2026/7/6 16:09:18 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻