首页/新闻资讯/正文详情

【MySQL】为什么数据库连接很消耗资源?

发布时间:2026/9/24 13:40:40 来源:云帆数科 栏目:资讯中心
【MySQL】为什么数据库连接很消耗资源?
1.概述转载为什么数据库连接很消耗资源开发应用程序久了总想刨根问底尤其对一些有公共答案的问题。大家都能解释但是追根究底都解释不清。凡是都有为什么而且用数字说明问题是最直观的。本文主要想探究一下连接数据库的细节尤其是在Web应用中要使用数据库来连接池以免每次发送一次请求就重新建立一次连接。对于这个问题答案都是一致的建立数据库连接很耗时但是这个耗时是都多少呢又是分别在哪些方面产生的耗时呢本文以连接MySQL数据库为例因为MySQL数据库是开源的其通信协议是公开的所以我们能够详细分析建立连接的整个过程。在本文中消耗资源的分析主要集中在网络上当然资源也包括内存、CPU等计算资源使用的编程语言是Java但是不排除编程语言也会有一定的影响。首先先看一下连接数据库的Java代码如下Class.forName(com.mysql.jdbc.Driver);Stringnamexttblog2;Stringpassword123456;Stringurljdbc:mysql://172.16.100.131:3306/xttblog2;ConnectionconnDriverManager.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.1907990.225243s**225.243ms**这意味着建立一次数据库连接需要225ms而这还是还可以认为是最少的当然「花费的时间可能受到网络状况、数据库服务器性能以及应用代码是否高效的影响」 但是这里只是一个最简单的例子已经足够说明问题了由于上面是程序异常终止了但是在正常的应用程序中连接的关闭一般都是通过Connection.close()完成的代码如下Class.forName(com.mysql.jdbc.Driver);Stringnameshine_user;Stringpassword123;Stringurljdbc:mysql://172.16.100.131:3306/clever_mg_test;ConnectionconnDriverManager.getConnection(url,name,password);conn.close();这样的话情况发生了变化主要体现在与数据库连接的断开如下图第1步此时处于MySQL通信协议阶段客户端发送关闭连接请求而且不用等待服务端的响应第2步TCP断开连接4次挥手完成连接断开这里是完整地完成了从数据库连接的建立到关闭整个过程花费了747.284311-747.1009540.183357s183.357ms这里可能也有网络状况的影响比上述的225ms少了但是也几乎达到了200ms的级别。那么问题来了想象一下这个场景对于一个日活2万的网站来说假设每个用户只会发送5个请求那么一天就是10万个请求对于建立数据库连接我们保守一点计算为150ms好了那么一天当中花费在建立数据库连接的时间有还不包括执行查询和更新操作100000*150ms15000000ms15000s250min4.17h也就说每天花费在建立数据库连接上的时间已经达到「4个小时」 所以说数据库连接池是必须的嘛而且当日活增加时单单使用数据库连接池也不能完全保证你的服务能够正常运行还需要考虑其他的解决方案缓存SQL的预编译 负载均衡 ……当然这不是本文的主要内容「本文想要阐述的核心思想只有一个数据库连接真的很耗时所以不要频繁的建立连接」 。

相关推荐

ChatGPT、Codex工程实录:能跑不代表能交,交付前必须补上的最后一段验证链
ChatGPT、Codex工程实录:能跑不代表能交,交付前必须补上的最后一段验证链

最近用 ChatGPT、Codex 做真实项目时,我越来越明显地感觉到一件事:Agent把代码做完,和这个任务真的能交付,中间其实还差很远。最典型的情况就是:代码改完了。本地能跑。测试也通过了。Diff看起来没什么大问题。于是很容… · 2026/9/24 13:40:40

计算机单片机毕设实战-基于 STM32 的温湿度光照采集与自动调控平台设计 基于 STM32 的环境参数阈值报警与远程监控系统设计(010509)
计算机单片机毕设实战-基于 STM32 的温湿度光照采集与自动调控平台设计 基于 STM32 的环境参数阈值报警与远程监控系统设计(010509)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️… · 2026/9/24 13:40:16

C语言学习日志[1]:前期准备
C语言学习日志[1]:前期准备

你是否曾因不知从何开始而放弃编程?编程的困难让你望而却步? 关于我 CSDN 的注册 https://www.csdn.net/ 用于平时学习笔记的记录,以及问题的提出。 Gitee 的注册 Gitee - 基于 Git 的代码托管和研发协作平台 用于平时学习时所写的代码的… · 2026/9/24 13:40:09

别再手动拼Excel发票了:用Invoify在线发票生成器3分钟出PDF
别再手动拼Excel发票了:用Invoify在线发票生成器3分钟出PDF

别再手动拼Excel发票了:用Invoify在线发票生成器3分钟出PDF 【免费下载链接】invoify An invoice generator app built using Next.js, Typescript, and Shadcn 项目地址: https://gitcode.com/GitHub_Trending/in/invoify 月底要开票的时候,你是… · 2026/9/24 14:14:31

学习建设gitee的仓库
学习建设gitee的仓库

一、Gitee 仓库介绍 Gitee(码云)是国内的代码托管平台,用于存放项目代码,实现代码版本管理、多人协作开发,相当于国内版的 Github,访问速度更快,适合我们学习 Git 版本控制、保存作业和项目代码… · 2026/9/24 14:14:30

ToastFish:用 Windows 通知栏背单词的免费开源工具
ToastFish:用 Windows 通知栏背单词的免费开源工具

ToastFish:用 Windows 通知栏背单词的免费开源工具 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish 上班、上课、午休,总有些碎片时间想记点单词,却又腾不出… · 2026/9/24 14:14:30

handy4cj类型转换实战:如何把任意格式字符串安全转为数字
handy4cj类型转换实战:如何把任意格式字符串安全转为数字

handy4cj类型转换实战:如何把任意格式字符串安全转为数字 【免费下载链接】handy4cj 项目地址: https://gitcode.com/Cangjie-SIG/handy4cj handy4cj 是一个基于仓颉语言的实用工具库,它的 convert 模块专门解决一个高频痛点:把格式各… · 2026/9/24 14:14:24

H100 GPU算力租赁怎么选:从显存、互联到服务器配置解析
H100 GPU算力租赁怎么选:从显存、互联到服务器配置解析

企业租用H100进行模型训练或推理时,真正需要比较的不是单一GPU型号,而是整个算力节点的配置。GPU规格、显存、互联、CPU、内存、存储和网络都会影响实际任务效率。H100有哪些关键规格?H100常见产品形态包括H100 SXM和H100 NVL。根据NVIDIA官方… · 2026/9/24 14:14:24

WSABuilds:在 Windows 上跑带 Play 商店和 Root 的 Android,从下载到装好的实操笔记
WSABuilds:在 Windows 上跑带 Play 商店和 Root 的 Android,从下载到装好的实操笔记

WSABuilds:在 Windows 上跑带 Play 商店和 Root 的 Android,从下载到装好的实操笔记 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGap… · 2026/9/24 14:14:18

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码