请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,数据库连接具体是慢在哪里呢?

  • 一般说网络连接比较慢,我能联想到三次握手四次挥手。能够想到请求应答这个过程在一个长远的距离上是慢的。

  • 但是,数据库连接,应该怎样去联想呢?它到底是慢在哪里呢?而且数据库连接池这个“池”中放置的是 `java.sql.Connection` 对象吧(会否放置其他对象),那就是说 Connection 对象的创建比较耗费时间?

  • 而且放到“池”中的对象一定要是能够重用的吧,否则就没意义了。这会否涉及到对象的状态,并发,同步……

  • 而且一定是很重量级的对象吧,

  • 突然想到,连接数据库分为:连接本地数据库和连接远程数据库。远程数据库不用说因为网络的缘故会比较慢,本地数据库是因为读写磁盘的原因吗

  • 放到池里的连接是因为“长连接”的缘故所以会快,还是因为JVM 没有垃圾回收,才快?

  • 池中的连接一直连着数据库,是数据库开辟了一块内存保存着这个连接吗(连接的主机,ip),数据库是否压力很大,数据库能承受多大的压力呢?


正在回答

1回答

数据库连接要比tcp连接多做很多事,他需要鉴定客户进来的权限,有时需要做反向dns,还需要为这个链接在服务器端分配相应的内存(这还不是指tcp链接本身的缓存)。从实际经验来看,通常这些合在一起这会比较慢。

再看客户端,客户端的压力其实不大,链接对象本身看实现,可以很轻量级只是带一个链接句柄,那这样的话就不涉及状态,并发啥的。当然,如果客户端本身做一些缓存之类的,那还是会带的。

数据库的长连接,我在课程中有讲到,垃圾回收只是回收的内存,真正的断开连接需要在finally里面调用close()方法。当然,为了能够最终调用close(),我们必须确保我们的数据库连接对象不被回收。如何保证呢,请参考垃圾回收这一章节。

那么再来看服务器端,关于是否能承受这样的连接池压力。答案当然是不能无限承受,肯定有一个限额。

1 回复 有任何疑惑可以回复我~
  • 提问者 南国漂泊 #1
    谢谢老师!tcp,鉴权,反向dns,分配内存,导致需要池化连接以提升性能
    回复 有任何疑惑可以回复我~ 2018-07-09 20:33:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信