【问题标题】:JConn4 sybase jdbc driver much slower than JConn2JConn4 sybase jdbc驱动比JConn2慢很多
【发布时间】:2019-02-12 23:46:37
【问题描述】:

最近我从 JConn2 Sybase 驱动升级到了 JConn4。我的 Java jdbc 代码反复调用 proc。使用 JConn4,每个 proc 调用慢约 1000 倍。 JConn2 的平均值约为 2 毫秒。使用 JConn4 大约是 2 秒。

proc 是通过 CallableStatement 调用的。

有人知道是否有一些连接属性已随 JConn4 发生变化,可能需要设置这些属性以消除此性能问题?

这是Linux环境。

我拿到了线程转储,我看到的只是这样的痕迹:

java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at com.sybase.jdbc4.timedio.RawDbio.reallyRead(RawDbio.java:404)
        at com.sybase.jdbc4.timedio.Dbio.doRead(Dbio.java:257)
        at com.sybase.jdbc4.timedio.InStreamMgr.readIfOwner(InStreamMgr.java:583)
        at com.sybase.jdbc4.timedio.InStreamMgr.doRead(InStreamMgr.java:319)
        at com.sybase.jdbc4.tds.TdsProtocolContext.getChunk(TdsProtocolContext.java:622)
        at com.sybase.jdbc4.tds.PduInputFormatter.readPacket(PduInputFormatter.java:239)
        at com.sybase.jdbc4.tds.PduInputFormatter.read(PduInputFormatter.java:72)
        at com.sybase.jdbc4.tds.TdsInputStream.read(TdsInputStream.java:91)
        at com.sybase.jdbc4.tds.TdsInputStream.readUnsignedByte(TdsInputStream.java:124)
        at com.sybase.jdbc4.tds.Tds.nextResult(Tds.java:2912)
        at com.sybase.jdbc4.jdbc.ResultGetter.nextResult(ResultGetter.java:78)
        at com.sybase.jdbc4.jdbc.SybStatement.nextResult(SybStatement.java:293)
        at com.sybase.jdbc4.jdbc.SybStatement.nextResult(SybStatement.java:275)
        at com.sybase.jdbc4.jdbc.SybStatement.executeLoop(SybStatement.java:2827)
        at com.sybase.jdbc4.jdbc.SybCallableStatement.execute(SybCallableStatement.java:244)

【问题讨论】:

  • 这样的性能问题往往是由于缺少随机熵造成的,这是Linux吗?如果您创建线程转储,您应该很容易发现这一点。 (原因可能是较新的驱动使用了更安全的登录方式)
  • 是的,这是 linux
  • 2s 是一个很大的延迟,它会显示在线程转储中,只能用连接失败、超时、资源耗尽等情况来解释。
  • 我拿了线程转储,我看到的只是我在上面的帖子中放的痕迹
  • 好的,线程转储没有指向任何客户端延迟。

标签: java jdbc sybase sap-ase jconnect


【解决方案1】:

Jconn2 和 Jconn4 之间的primary change 是 DYNAMIC_PREPARE 参数的默认设置。尝试在连接参数中将其设置为 FALSE。

这个页面告诉你如何change the DYNAMIC_PREPARE parameter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2014-03-18
    • 1970-01-01
    • 2010-10-19
    • 2023-03-24
    相关资源
    最近更新 更多