我在SQL Server2005上的一个非常小的表(<10行,5列)上运行一个非常简单的查询,通常它会立即返回结果,但有时需要很长时间才能完成(比如5-10秒)。我知道,我们的服务器负载很重,这可能是原因(因为我不认为它会因为锁而发生-没有人在写那个表)-但我需要以某种方式找到瓶颈。
有什么建议可以让我找到让这些简单的查询运行这么长时间的确切服务器资源吗?
发布于 2011-04-07 22:01:12
您唯一需要做的就是分析。你需要对内存、输入/输出和处理器有一个概念。您需要知道这3个中的哪一个导致服务器速度变慢。有很多产品都可以做到这一点(甚至还有一个安装了windows的还可以的性能监控器)。
不要“思考”它,你需要看到数据才能理解根本问题。
发布于 2011-04-07 22:01:54
在SSMS中,右键单击对象资源管理器中连接的服务器,然后选择“活动监视器”。
在那里,您可以看到最近昂贵的查询和其他性能数据。
发布于 2011-04-07 22:05:42
除了运行profiler并检查page life expectancy和buffer cache hit ratio之外,请参阅:Use sys.dm_os_performance_counters to get your Buffer cache hit ratio and Page life expectancy counters
也可能(但您必须测试)发生的情况是,您要查找的数据从RAM中的缓存中取出,现在它必须从磁盘中获取,这将需要更长的时间,当您在一秒钟后再次运行它时,它将再次变得更快
您可以通过运行统计信息io on来进行检查
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
https://stackoverflow.com/questions/5582324
复制相似问题