最近,我从JConn2 Sybase驱动程序升级到JConn4。我的Java jdbc代码反复调用proc。使用JConn4,每个proc调用的速度要慢1000倍。 JConn2平均为〜2ms。使用JConn4大约需要2秒。
该过程通过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)
答案 0 :(得分:0)
Jconn2和Jconn4之间的primary change是DYNAMIC_PREPARE参数的默认设置。尝试在连接参数中将其设置为FALSE。
此页面介绍了如何change the DYNAMIC_PREPARE parameter。