数据库中的总会话数与websphere

时间:2016-12-29 10:42:00

标签: java oracle11g datasource connection-pooling websphere-8

我过去几天在我的申请中面临一个问题,现在已经运行了几个月: 我在WebSphere Application Server中配置了连接池,在我的应用程序的数据源(oracle)中没有最大连接数为20,最小连接数为1,收敛时间为180秒,未使用时间为1800秒,老化超时为0秒。 从过去的几天开始,我们看到一个问题,突然在早上我们开始在应用程序中获得超时,然后是一个奇怪的行为,我们没有得到任何异常,但Callable Statement用于运行程序返回零结果所有执行甚至虽然DB中存在数据。

在发生问题时,System Out或System Err日志中没有例外。我们只能看到一个异常连接异常和数据库会话终止异常

java.sql.SQLRecoverableException: ORA-00028: your session has been killed 
ORA-00028: your session has been killed

但这发生在申请超时前6小时。

此外,在检查数据库中的连接数时,我们只能看到9个会话,尽管我们已将连接池配置为20.在查询下方使用以检查TOTAL_CON:

SELECT s.machine
 , s.username 
 , count(decode(s.STATUS, 'ACTIVE', 1))   as active_con
 , count(decode(s.STATUS, 'INACTIVE', 1)) as inactive_con
 , count(*)                               as total_con
FROM v$session s
WHERE type <> 'BACKGROUND'
GROUP BY username, machine 
ORDER BY total_con DESC;

我们重新启动了WAS服务器并解决了问题,并且还将数据库中的会话数增加到了20个。

所以我有两个问题: 1.由于数据库团队表示没有会话被杀,他们会从应用程序端导致ORA-00028。 2.数据库中的总会话数是否少于数据源中配置的最大连接数是否正常,如果不是,可能导致此问题的原因。

1 个答案:

答案 0 :(得分:0)

  
      
  1. 可能导致ORA-00028从应用程序端出来的原因是数据库团队表示没有会话从他们身边被杀死。
  2.   

我建议您检查网络上的所有防火墙设置。由于此问题发生在凌晨3点,当流量最少时,问题可能是由于单个连接坐了一会儿然后被外部超时(例如防火墙空闲超时)终止。

在评论中你说你的TCP保持活动时间设置为1800秒(30分钟)所以我们假设在20分钟后TCP连接变坏。

您的配置设置为:

  • 丢弃未使用1800秒(30分钟)的连接
  • 每180秒(3分钟)运行泳池维护
  • 单个连接可以打开的无限时间,因为老化超时为0

使用这些设置,websphere可以将单个连接合并超过20分钟,因此我建议将老化超时设置为大约900秒(15分钟),因此单个连接不会汇集超过20分钟。

请注意,websphere可以合并连接的总时间为:

aged_timeout + reap_time = max_pooled_connection_time

你总是想要firewall_timeout > max_pooled_connection_time

  
      
  1. 数据库中的总会话数是否少于数据源中配置的最大连接数是否正常,如果不是,可能导致此问题的原因。
  2.   

是的,这是完全正常的,也是理想的。 WebSphere将根据需要池连接,最大池大小。一旦达到最大池大小,性能瓶颈就会开始出现。