【发布时间】:2017-11-08 10:10:22
【问题描述】:
我正在尝试在我的本地 SQL Server 上加载测试一些纯 SQL 查询(我不确定这是测试性能的最佳方法,但这会给我一个粗略的估计)。我正在为 SQL Server 使用 Java 的 PreparedStatement 和 MS JDBC,并在每个线程中用一个新的 Connection 实例化了一百个线程。
我已经安装了 SQL Server Express 版本 (11.0.210)。不幸的是,Express 版不会并行运行多个查询(专业版也是如此),所以我的测试不会很有用。
一位同事告诉我,我可以使用 SQL Developer 2014。我在设置它时遇到了一些困难,所以我可能忘记了一些东西。我开始使用 sysadmin (sa) 帐户使用它。
使用 JDBC 创建一个 Connection 并按预期工作。
现在,我正在尝试创建两个Connection:
String SQLSERVER_CONNECTION_STRING = "jdbc:sqlserver://localhost\\SQLDEVELOPPER:55372";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c1 = DriverManager.getConnection(SQLSERVER_CONNECTION_STRING, USER, USER_PWD);
Connection c2 = DriverManager.getConnection(SQLSERVER_CONNECTION_STRING, USER, USER_PWD);
首先我在stderr 收到这条消息:
nov. 08, 2017 10:41:00 AM com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
AVERTISSEMENT: ConnectionID:1 ClientConnectionId: bfb1d22d-a5fb-4f74-9be8-60fb91c9d701 Prelogin error: host localhost port 55372 Error reading prelogin response: Software caused connection abort: recv failed ClientConnectionId:bfb1d22d-a5fb-4f74-9be8-60fb91c9d701
并得到此错误 16 次:
nov. 08, 2017 10:41:01 AM com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
AVERTISSEMENT: ConnectionID:1 ClientConnectionId: fcd64c62-ba9a-48ee-b195-11307e7bad30 Prelogin error: host localhost port 55372 Error reading prelogin response: Une connexion existante a dû être fermée par l’hôte distant ClientConnectionId:fcd64c62-ba9a-48ee-b195-11307e7bad30
翻译:“现有连接必须由远程主机关闭”(我首先将其读为“现有连接可能已被远程主机关闭”,但正如@fab 的评论指出的那样,它可能是错误的)
然后这个堆栈跟踪:
Exception in thread "main" java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: Une connexion existante a dû être fermée par l’hôte distant ClientConnectionId:0fa4b1cb-ae03-407a-bcc3-54a0cd85005c
at fr.aso.sandbox.utils.SQLServerConnectionManager.getConnection(SQLServerConnectionManager.java:24)
at fr.aso.sandbox.myComp.myComp.test.KeycopterTest.doubleConnectionThreadTest(KeycopterTest.java:78)
at fr.aso.sandbox.myComp.myComp.test.KeycopterTest.main(KeycopterTest.java:49)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Une connexion existante a dû être fermée par l’hôte distant ClientConnectionId:0fa4b1cb-ae03-407a-bcc3-54a0cd85005c
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2397)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2384)
at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1884)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.Prelogin(SQLServerConnection.java:2137)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1973)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at fr.aso.sandbox.utils.SQLServerConnectionManager.getConnection(SQLServerConnectionManager.java:22)
... 2 more
我找到了关于此的 SO 问题和答案,但其中大多数是关于单个连接不起作用的问题。
这里,当我尝试与同一个用户进行2个或多个连接时,就会出现问题,所以我已经排除了“TCP未启用”和“防火墙阻止sql server”的问题。
SQL Developer 版本是:
Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64)
Jun 17 2016 19:14:09
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
因为我可以在 SQL Express 上建立多次相同的连接,所以我认为这是 SQL Server 配置问题,但找不到任何相关内容。
我是不是在什么地方错过了什么?有没有办法得到更明确的错误?
【问题讨论】:
-
因为理解错误可能很重要(如果我错了,请纠正我),但我认为翻译应该是“现有的连接必须关闭远方的主人”
-
@fab 谢谢!我认为你是对的,我已经编辑了这个问题。
标签: java sql-server jdbc