代码之家  ›  专栏  ›  技术社区  ›  Brad Gardner

如何诊断SQL Server视图和JDBC的性能问题

  •  1
  • Brad Gardner  · 技术社区  · 14 年前

    我在SQL Server 2008中定义了一个将4个表连接在一起的视图。在SQL Server Management Studio中执行此视图大约需要3秒钟的运行时间,并返回大约45000条记录。我的应用程序是用Hibernate用Java编写的,只需在HQL中执行“来自MyVIEWObjt”的查询。运行此命令时,执行时间始终在45秒左右。我还尝试简单地使用JDBC来运行这个查询,并获得了相同的性能级别,所以我假设它与Hibernate无关。

    我的问题:我能做些什么来诊断这个问题?显然,ManagementStudio运行查询的方式与我的应用程序运行查询的方式有所不同,但我还没能想出多少。

    我提出的唯一可行的解释是JTDS库中包含Java中的SQLServer驱动程序的问题。

    任何指导都将不胜感激。

    更新 我回到纯JDBC的尝试中,尝试将selectmethod和responseBuffering属性添加到连接字符串中,但没有得到任何改进。我还从应用程序中获取了我的JDBC代码,并从一个只包含JDBC代码的测试程序中运行它,它在预期的3秒内运行。所以在我看来,这似乎是环境应用。

    我的应用程序是基于GoogleWebToolkit(GWT)的应用程序,JDBC代码正在我的主rpc servlet中运行。本质上,rpc方法接收调用并立即执行JDBC代码。不过,在这个设置中没有什么能给我足够的指示,说明为什么性能很差。我将尝试JDBC3.0驱动程序,看看它是否工作得更好,但感觉这并不能完全解决这个问题。

    目前我的目标是让我的查询与JDBC一起工作,然后将其切换回Hibernate,这样我就可以保持测试的简单性。谢谢你的帮助!

    更新2 我终于开始关注问题的根源,尽管我仍然不知道实际的问题是什么。我在SQL Server中打开了视图,并将SQL语句(相当大)完全复制到我的代码中,并使用JDBC执行它,而不是从视图中提取数据,而且大多数性能问题都消失了。似乎GWT、SQL Server视图和JDBC的某些组合在这里无法正常工作。我不认为在代码中保留一个非常大的手写查询是一个长期的解决方案,但它确实提供了更多的洞察力。

    2 回复  |  直到 14 年前
        1
  •  2
  •   mezzie    14 年前
    <property name="hibernate.show_sql">true</property>
    

        2
  •  1
  •   stacker    14 年前