You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 8.5+Oracle连接池未使用连接问题及PREV_SQL_ID有效性确认

连接池连接耗尽诊断:PREV_SQL_ID为空是否能判定连接未被使用?

我们有一个部署在Tomcat 8.5应用服务器上的Grails 2.5应用,某客户反馈其连接池出现连接耗尽问题。客户的DBA查询v$session视图后称存在从未被使用的“死”连接,并以PREV_SQL_ID列为空作为判定依据。我在内部开发及测试环境中均未遇到该场景。

我的核心问题:

  • 以PREV_SQL_ID列为空判定未使用连接是否合理?
  • 该字段为空意味着什么?是否本该为空?

补充说明:该应用对数据库依赖度极高,因此我认为连接池中的初始连接至少会被使用一次,尤其是在应用运行一段时间后。

参考信息

JDBC URL

标准格式:jdbc:oracle:thin:@//server.org:1522/service_name

Tomcat连接池配置(来自Datasource.groovy)

properties {
    jmxEnabled = true
    initialSize = 5
    minIdle = 5
    maxIdle = 25
    maxWait = 10000
    maxAge = 10 * 60000
    timeBetweenEvictionRunsMillis = 5000
    minEvictableIdleTimeMillis = 60000
    validationQueryTimeout = 3
    validationInterval = 15000
    testOnBorrow = true
    testWhileIdle = true
    testOnReturn = false
    jdbcInterceptors = 'ConnectionState'
    defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED

    validationQuery = 'select 1 from dual'

    maxActive = 50
}

客户系统v$session查询结果(精简版)

SIDMachineLoginPrev exec startPREV_SQL_IDLAST_CALL_ET
412Xyz2024/5/6 18:112024/5/6 18:118p7uxtbaga5gt0
4055Xyz2024/5/6 18:112024/5/6 18:11adg3hxn57syna3
10712Xyz2024/5/6 18:112024/5/6 18:11520mkxqpf15q89
9512Xyz2024/5/6 18:112024/5/6 18:115xmx4tywy26y614
1638Xyz2024/5/6 18:112024/5/6 18:11520mkxqpf15q89
11126Xyz2024/5/6 18:112024/5/6 18:11adg3hxn57syna0
1638Xyz2024/5/6 18:102024/5/6 18:11520mkxqpf15q814
5873Xyz2024/5/6 18:102024/5/6 18:11520mkxqpf15q89
2034Xyz2024/5/6 18:102024/5/6 18:11cdmran58d6r3t11
1229Xyz2024/5/6 18:102024/5/6 18:11520mkxqpf15q811
5264Xyz2024/5/6 18:102024/5/6 18:11520mkxqpf15q810
10326Xyz2024/5/6 18:092024/5/6 18:115xmx4tywy26y614
5882Xyz2024/5/6 18:082024/5/6 18:11520mkxqpf15q810
815Xyz2024/5/6 18:072024/5/6 18:11520mkxqpf15q89
1625Xyz2024/5/6 18:072024/5/6 18:11520mkxqpf15q89
4453Xyz2024/5/6 18:072024/5/6 18:11520mkxqpf15q814
4867Xyz2024/5/6 18:052024/5/6 18:11520mkxqpf15q89
9101Xyz2024/5/6 18:052024/5/6 18:11520mkxqpf15q89
2853Xyz2024/5/6 18:042024/5/6 18:11520mkxqpf15q814
5276Xyz2024/5/6 18:022024/5/6 18:11520mkxqpf15q89
4465Xyz2024/5/6 18:012024/5/6 18:11520mkxqpf15q89
11119Xyz2024/5/5 10:522024/5/5 10:54112624
11123Xyz2024/5/4 18:562024/5/4 19:00169871
3664Xyz2024/5/4 12:182024/5/4 12:19193926
7090Xyz2024/5/3 19:202024/5/3 19:22254946
2448Xyz2024/5/3 17:382024/5/3 17:43260858
3236Xyz2024/5/3 17:342024/5/3 17:40261039
3642Xyz2024/5/3 17:132024/5/3 17:17262431
7496Xyz2024/5/3 17:012024/5/3 17:02263344
1644Xyz2024/5/3 16:142024/5/3 16:16266088
2027Xyz2024/5/3 16:142024/5/3 16:14266225

我的调查

  • 检索后未找到关于PREV_SQL_ID字段含义及其在连接池场景下表现的相关资料。
  • 我的理解是:若连接存在问题,验证查询会失败,该连接会被移出连接池。
  • 查阅了Tomcat关于废弃连接的文档,但有疑问:这些看似从未被使用的连接,是否仍可被视为废弃连接?如何判定并记录这种情况?
  • 根据Paul W的建议,在v$session查询结果中添加了LAST_CALL_ET字段,从数据来看这些连接确实长期未被使用。

内容的提问来源于stack exchange,提问作者John Lear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:32:00