Hallo,

ich verbinde mich via JDBC mit einem SQL Server SQLEXPRESS 64Bit, Version 11.0.6248.0 auf Windows Server 2012 R2.

Clients sind diverse IBM i (AS/400) V7R2 mit Java 1.71. JDBC-Treiber ist sqljdbc41.jar von Microsoft.

Auf fast allen IBM i dauert DriverManager.getConnection ca. 15 Sekunden. :-(

Es gibt *eine* IBM i-Umgebung, auf der die Verbindungsaufnahme flott funktioniert.

Hier Ausschnitte aus zwei JDBC-Traces:

Langsame Performance:
21.07.2017 11:11:46 com.microsoft.sqlserver.jdbc.TDSChannel enableSSL
MAXIMAL: TDSChannel (ConnectionID:1) Creating SSL socket
21.07.2017 11:12:03 com.microsoft.sqlserver.jdbc.TDSChannel$ProxySocke t getInputStream

Normale Performance:
21.07.2017 11:14:11 com.microsoft.sqlserver.jdbc.TDSChannel enableSSL
MAXIMAL: TDSChannel (ConnectionID:1) Creating SSL socket
21.07.2017 11:14:12 com.microsoft.sqlserver.jdbc.TDSChannel$ProxySocke t getInputStream

Im schlechteren Fall dauert das Erzeugen eines SSL-Sockets offenbar über 15 Sekunden.

Woran könnte das liegen?

PS: Dieser Java-Vierzeiler erzeugt einen SSL-Socket in allen Umgebungen schnell:
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
logLine("Creating ssl socket ...");
SSLSocket soc = (SSLSocket) factory.createSocket();
logLine("Ssl socket created!");

PS2: Abstellen von SSL im Connection String mit encrypt=false hilft nichts,
da die Verbindungsaufnahme trotzdem mit SSL läuft.

PS3: Das File java.security ist auf allen IBM i identisch.

PS4: Mit dem jtds-Treiber gibt es dasselbe Performance-Problem.