Nav*_*buE 5 oracle connection-pooling jdbc oracle11g hikaricp
在HikariCP的文档中,提到了
强烈建议设置此值,并且该值至少应比任何数据库级连接超时至少短30秒。
Oracle11.2数据库应考虑哪些数据库级别的连接超时?我如何找到那些超时(执行查询)?
简短回答:无(默认)。
为了记录(包括在此细节情况下,链接的变化),我们谈论的是财产maxLifetime
的HikariCP:
此属性控制池中连接的最长生命周期。使用中的连接永远不会退役,只有当它关闭时才会被移除。我们强烈建议设置此值,它应该至少比任何数据库或基础设施强加的连接时间限制少 30 秒。值 0 表示没有最大生命周期(无限生命周期),当然受 idleTimeout 设置的约束。默认值:1800000(30 分钟)
根据我的经验,HikariCP 这样做是一件好事。据我所知,默认情况下,Oracle 不强制连接的最大生命周期(既不在 JDBC 驱动程序端 (1),也不在服务器端 (2))。所以在这方面,“基础设施强加的连接时间限制”是+无穷大——这对我们来说是一个问题,因为我们确实观察到了长期连接的问题。这也意味着任何值都是“至少少 30 秒”,包括默认值:)
我想连接层对此没有做任何事情,因为它依靠上面的池层来处理这些事情。(现已弃用)隐式连接池是不可能的,我不知道UCP(替代品)是否这样做,但如果您使用 HikariCP,您就不会使用它们。
现在,在给定连接 30 分钟后(通常是在出于各种目的多次重用之后),HikariCP 将关闭它并创建一个新的连接。这具有非常小的成本,并解决了我们的长期连接问题。我们对这个默认设置很满意,但为了以防万一(参见下面的 2),仍然可以对其进行配置。
(1)OracleDataSource
不提供任何配置点(属性或系统属性)来控制它,我观察到了无限的生命周期。
(2) 服务端限制见profile参数IDLE_TIME
。引用
这个答案:
默认情况下,Oracle 不会因不活动而关闭连接。您可以使用 IDLE_TIME 配置配置文件以导致 Oracle 关闭不活动的连接。
要验证IDLE_TIME
您的用户的价值,请结合此问答中的答案:
select p.limit
from dba_profiles p, dba_users u
where p.resource_name = 'IDLE_TIME' and p.profile = u.profile and u.username = '...'
;
Run Code Online (Sandbox Code Playgroud)
默认值为UNLIMITED
。
请注意,其他地方可能会强制执行其他限制(防火墙......是的,我已经被它咬了,尽管大多数数据库系统都有一个保持活动的机制)可能会干扰。因此,您最好将其设置为可配置的,以防在您部署产品时发现此类问题。
在 Linux 上,您可以通过监视连接到数据库的 TCP 套接字来验证物理连接的最大生命周期。我一直在我的服务器上运行下面的脚本(从数据库的角度来看,它是客户端主机),它需要 1 个参数,即ip:port
您的 oracle 节点的,因为它出现在输出中netstat -tan
(如果您有多个节点,则为模式) .
#!/bin/bash
target="$1"
dir=$(mktemp -d)
while sleep 10
do
echo "------------ "$(date)
now=$(date +%s)
netstat -tan | grep " $target " | awk '{print $4}' | cut -f2 -d: | while read port
do
file="p_$port"
[ ! -e $file ] && touch $file
ftime=$(stat -c %Z "$file")
echo -e "$port :\t "$(( now - ftime))
done
done
\rm "$dir"/p_*
\rmdir "$dir"
Run Code Online (Sandbox Code Playgroud)
如果你运行它并在sleep
一段时间内用 ctrl-c 停止它,它应该退出循环并清理临时目录,但这不是 100% 万无一失
在结果中,任何端口都不应显示超过 1800 秒(即 30 分钟)的值,请给予或花费一分钟。请参见下面的示例输出,第一个示例显示 1800 秒以上的 2 个套接字,它们在 10 秒后消失了。
------------ Thu Jul 6 16:09:00 CEST 2017
49806 : 1197
49701 : 1569
49772 : 1348
49782 : 1317
49897 : 835
49731 : 1448
49620 : 1830
49700 : 1569
49986 : 523
49722 : 1498
49715 : 1509
49711 : 1539
49629 : 1820
49732 : 1448
50026 : 332
49849 : 1036
49858 : 1016
------------ Thu Jul 6 16:09:10 CEST 2017
49806 : 1207
49701 : 1579
49772 : 1358
49782 : 1327
49897 : 845
49731 : 1458
49700 : 1579
49986 : 533
49722 : 1508
49715 : 1519
49711 : 1549
49732 : 1458
50026 : 342
49849 : 1046
49858 : 1026
Run Code Online (Sandbox Code Playgroud)
您需要运行脚本超过 30 分钟才能看到,因为它不知道之前存在的套接字的年龄
归档时间: |
|
查看次数: |
5023 次 |
最近记录: |