为什么建立数据库连接耗时?究竟耗时多久?

数据库连接从连接池中取这已经是大家的共识了,因为频繁的建立或者关闭连接代价太大,那么代价究竟有多大?

我们先准备一个简单的数据库连接代码段

java 复制代码
public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException {
        Class.forName("com.mysql.jdbc.Driver");
        String name = "m_test";
        String password = "m_test";
        String url = "jdbc:mysql://xxxxxx:1234/test"; //脱敏处理
        Connection conn = DriverManager.getConnection(url, name, password);
        conn.close();
    }

然后打开抓包过滤器,分别过滤src和dst是目标数据库地址的网络请求

前面是TCP的三次握手,后面是四次挥手(少了一次,因为服务器的套接字端口已经关了,不会给客户端发请求了,所以没截取到)

详见TCP三次握手、四次分手

我们再看耗时-0.190908s,也就是190ms

除了部分慢sql,一个普通的sql一般最多也就几十毫秒,不会高于100ms

这也就是说,如果不使用连接池,那么每个请求平均多200ms的耗时

一般用户对接口的容忍度也才200ms

如果一个日请求量为10w的系统,那么会平白无故多出四五个小时的耗时,离离原上普了可以说。

相关推荐
HAWK eoni3 分钟前
Mysql 驱动程序
数据库·mysql
二哈赛车手15 分钟前
新人笔记---实现简易版的rag的bm25检索(利用ES),以及RAG上传时的ES与向量数据库双写
java·数据库·笔记·spring·elasticsearch·ai
何中应26 分钟前
CentOS 7安装、卸载MySQL数据库(二)
数据库·mysql·centos
KmSH8umpK35 分钟前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第六篇
数据库·redis·分布式
梁萌1 小时前
mysql使用事件做日志表数据转移
数据库·mysql
lThE ANDE1 小时前
MySQL中的TRUNCATE TABLE命令
数据库·mysql
kexnjdcncnxjs1 小时前
Redis如何记录每一次写操作_开启AOF持久化机制实现命令级追加记录
jvm·数据库·python
逸Y 仙X2 小时前
文章十九: ElasticSearch Full Text 全文本查询
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
STER labo2 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
微软技术分享2 小时前
本地部署千问 2.5-1.5B-GGUF + LangChain 封装学习
数据库·学习·langchain