为什么要释放数据库连接

1、数据库连接,在oracle的实现中,是一条tcp链路。这个链路上,可以承载多个statement。比如最大200个连接,每连接最大300个statement,那么这个数据库可以支持6w个会话。

2、连接池自身在什么时候释放连接

连接池存在的价值就是不释放连接,下一个人申请连接时,复用已经建立的连接。(应用代码虽然调用了释放函数,但连接池不会真的释放)

连接池在任务空闲时,可以释放一部分连接。在连接池关闭时,释放所有连接。


3、如果程序崩溃,机器掉电,交换机掉电,连接就无法释放了,会怎么样?

要看jdbc实现时,有没有做应用层心跳。


4、为什么要应用层心跳,tcp底层不支持吗?

    1、tcp底层支持心跳,java中叫SO_KEEPALIVE。tcp的rfc协议规定,心跳是可以选的。也就是说,协议可以不实现。即使实现了,可能默认也没开启。

   2、开启后,是什么情况呢

[root@localhost B]# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
[root@localhost B]# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75
[root@localhost B]# cat /proc/sys/net/ipv4/tcp_keepalive_probes
9

在linux中,这几个参数,表示每隔7200秒,自动发送一次心跳,如果没有应答,则每隔75秒再发一次,一共发9次。都失败,就认为断链了。你可以修改这几个参数,让心跳更频繁一些,检测更敏感一些。

3、但是,这不能代替应用层心跳

底层心跳,只能代表操作系统协议栈之间是OK的,你应用层有没有问题,就不知道了。所以应该使用应用层心跳。

另外,底层心跳包,可能被防火墙屏蔽。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值