【问题标题】:Strange performance Issue with SQL Server + Spring JAVA applicationSQL Server + Spring JAVA 应用程序的奇怪性能问题
【发布时间】:2012-08-24 07:36:11
【问题描述】:

从基于 Spring 的应用程序访问 SQL Server 数据时,我遇到了一个奇怪的性能问题。在我当前的设置中,Spring java 应用程序运行在单独的机器上,从远程 SQL Server DB 访问数据。我在 Spring 中使用 NamedParameterTemplate,我相信它使用 Prepared Statement 来执行查询。出于某种原因,某些查询需要很长时间才能完成(大约 2 分钟)。 JAVA 应用程序运行在运行 64 位版本 Java v1.6 的 64 位机器上,SQL Server 是 MS SQL Server 2008 R2。

奇怪的是,如果我在运行 Windows XP 32 位的笔记本电脑上运行相同的 Java 应用程序,运行相同版本的 Java v1.6,查询时间不到一秒钟,访问完全相同的远程数据库服务器(事实上,我是通过 VPN 连接的)

这表明问题不在于 Spring 框架,而可能在于 SQL JDBC 驱动程序。我正在使用 Microsoft JDBC Driver 4.0 for SQL Server (sqljdbc.jar)

我完全一无所知,因为可能出了什么问题,并且不知道从哪里开始我的调试过程。 我明白,我的问题中没有太多信息,所以如果您需要任何具体细节,请告诉我。

感谢您的任何帮助/建议。

【问题讨论】:

  • 我会从分析应用程序开始,看看它把时间花在了哪里。
  • 如果运行相同代码的两台不同机器的性能差异如此之大,这可能表明有问题的机器和数据库之间存在某种防火墙问题,或者数据库可能处于异常状态在测试第一个时加载。你排除了其中任何一个吗?
  • @mattb 我已经排除了加载部分,因为我们已经多次尝试并看到完全相同的行为。没有在防火墙上排除任何规则,但不知道防火墙如何导致查询执行时间过长。任何想法都会很有帮助。
  • 我建议尝试在两台机器上使用类似 wireshark 的东西来捕获网络流量,看看有什么区别(如果有的话)。
  • 我有类似的问题,我正在将我的应用程序部署到 x64 服务器并且一个简单的请求(SELECT + WHERE 和准备好的 St)在它应该返回的地方没有结果

标签: java sql-server-2008 jdbc prepared-statement spring-jdbc


【解决方案1】:

我认为这可能是由于您的 java 版本和 jdbc 驱动程序的组合未能与服务器握手连接。见Driver.getConnection hangs using SQLServer driver and Java 1.6.0_29http://blogs.msdn.com/b/jdbcteam/archive/2012/01/19/patch-available-for-sql-server-and-java-6-update-30.aspx

如果是这样,切换到 1.6.0 升级 30 或更高版本并应用 kb 2653857 应该可以解决它。

【讨论】:

  • 不错的答案,毕竟我的问题与 OP 的问题不同,但我会给你赏金;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多