SQL Server 2008 R2上的SQL Server语句间歇性变慢
对于我们的一位客户,我们的应用程序遇到了一些性能问题。这是一个.NET 3.5 Web应用程序,正在使用和更新SQL Server数据库上的数据。当前,我们的生产环境由一台Windows 2008 R2计算机作为前端,而在后端则是一个SQL Server 2008 R2群集。我们的应用程序使用COM +和MSDTC连接到数据库。 这是正在发生的事情:我们的最终用户有时会抱怨应用程序运行缓慢。某些页面的加载时间比预期的要多。在尝试找出正在发生的事情时,我设法找出了数据库方面的一些奇怪行为,这可能是性能下降的原因。我注意到有时有些SQL语句需要花费更多的时间才能运行。我设法使用探查器跟踪(带有TSQL_Duration模板)来识别长时间运行的查询,从而识别其中一些语句(主要是对应用程序存储过程的调用)。 问题是,当我直接在SQL Management Studio的数据库上运行这些存储过程时,有时它们会花费很长时间(大约7/8秒),而其他时候它们却很快(不到1秒)。我不知道为什么会这样,这让我发疯,因为其他任何应用程序都没有使用SQL机器(4核,32 GB),并且这些查询的运行时间不会太长。 不是DBA或SQL Server专家,我一直在尝试研究一些可以帮助我理解问题的东西。这是我尝试解决问题以及到目前为止发现的步骤: 应用程序调用的所有TSQL代码都是在存储过程中编写的。 我在SQL Server事件探查器上确定了一些长时间运行的查询,但是,当我在Management Studio上运行这些查询时,它们要么运行很长时间(从4到10秒),要么运行很快(不到1秒)。我正在使用参数中传递的相同数据运行完全相同的查询。这些查询主要是存储过程,其中包含选择语句。 我尝试查看等待和排队统计信息,以尝试确定是否有某些资源在等待进程。我运行了以下查询: WITH Waits AS (SELECT wait_type, wait_time_ms / 1000.0 AS WaitS, (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS, signal_wait_time_ms / 1000.0 AS SignalS, waiting_tasks_count AS WaitCount, 100.0 * wait_time_ms …