SQL Query在随机时间内需要很长时间

时间:2011-04-07 13:58:04

标签: sql performance

我在SQL Server 2005上的一个非常小的表(< 10行,5列)上运行一个非常简单的查询,通常它会立即返回结果,但有时需要很长时间才能完成(比如5-10s)。我知道,我们的服务器负载很重,这可能是原因(因为我认为它不会因锁而发生 - 没有人写入该表) - 但我需要以某种方式找到瓶颈。

有关如何找到确切的服务器资源的任何建议,这使得如此简单的查询运行这么久?

4 个答案:

答案 0 :(得分:6)

在SSMS中右键单击对象资源管理器中的连接服务器,然后选择“活动监视器”。

在那里,您可以看到最近的昂贵查询和其他性能数据。

答案 1 :(得分:4)

除了运行探查器以及同时检查page life expectancybuffer cache hit ratio之外,请参阅:Use sys.dm_os_performance_counters to get your Buffer cache hit ratio and Page life expectancy counters

它也可能(但你必须测试)发生的是你正在寻找的数据被缓存在RAM中的缓存中,现在它必须从磁盘中获取它并且这将花费更长的时间,当你稍后再次运行它会再次快速

您可以通过在

上运行统计信息来检查
SET STATISTICS IO ON

select * ..your query
你应该看到类似的东西

表'TableNAme'。扫描计数1,逻辑读取4,物理读取2

如果您看到physical reads高于0,则会从磁盘中抓取它

你可以验证这一点(不在生产​​中)

从RAM中删除数据

DBCC freeproccache
DBCC DROPcleanbuffers

现在当你运行两次查询时,你会看到类似的东西,第一次运行将来自磁盘,第二次运行来自RAM

表'TableNAme'。扫描计数1,逻辑读取4,物理读取2

表'TableNAme'。扫描计数1,逻辑读取4,物理读取0

答案 2 :(得分:2)

您唯一需要的是分析。您需要了解内存,输入/输出和处理器。您需要知道这3个中的哪个导致服务器速度变慢。有很多产品可以做到这一点(甚至还有一个安装了Windows的性能监视器。)

不要“思考”它,你需要查看数据才能理解根本问题。

答案 3 :(得分:1)

您无需写入表格即可锁定它。您可以尝试修改其中一个SELECT语句以使用WITH (NOLOCK)另一个语句(插入/更新/删除)非常慢并且连接到此表可能会锁定它。