面试官:为什么数据库连接很消耗资源?
点击关注公众号,Java干货及时送达
作者:lmy86263
来源:blog.csdn.net/lmy86263/article/details/76165714
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);
// 之后程序终止,连接被强制关闭
第1步:建立TCP连接,通过三次握手实现; 第2步:服务器发送给客户端握手信息,客户端响应该握手消息; 第3步:客户端发送认证包,用于用户验证,验证成功后,服务器返回OK响应,之后开始执行命令;
Connection.close()
关闭的,而是由于程序执行完毕,导致进程终止,造成与数据库的连接异常关闭,所以最后会出现TCP的RST报文。在这个最简单的代码中,没有设置任何额外的连接属性,所以在设置属性上占用的时间可以认为是最少的(其实,虽然我们没有设置任何属性,但是驱动仍然设置了字符集、事务自动提交等,这取决于具体的驱动实现),所以整个连接所使用的时间可以认为是最少的。但从统计信息中可以看出,在不包括最后TCP的RST 报文时(因为该报文不需要服务器返回任何响应),但是其中仍需在客户端和服务器之间进行往返7次,也就是说完成一次连接,可以认为,数据在客户端和服务器之间需要至少往返7次,从时间上来看,从开始TCP的三次握手,到最终连接强制断开为止(不包括最后的RST报文),总共花费了: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次挥手完成连接断开;
缓存 SQL的预编译 负载均衡 ……
当然这不是本文的主要内容,本文想要阐述的核心思想只有一个,数据库连接真的很耗时,所以不要频繁的建立连接。
评论