首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询在随机时间内需要很长时间

SQL查询在随机时间内需要很长时间
EN

Stack Overflow用户
提问于 2011-04-07 21:58:04
回答 4查看 11.4K关注 0票数 5

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

有什么建议可以让我找到让这些简单的查询运行这么长时间的确切服务器资源吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-07 22:01:12

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-04-07 22:01:54

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

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

票数 6
EN

Stack Overflow用户

发布于 2011-04-07 22:05:42

除了运行profiler并检查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中的缓存中取出,现在它必须从磁盘中获取,这将需要更长的时间,当您在一秒钟后再次运行它时,它将再次变得更快

您可以通过运行统计信息io on来进行检查

代码语言:javascript
复制
SET STATISTICS IO ON

select * ..your query

您应该看到如下所示的内容

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

如果你看到physical reads大于0,它就会从磁盘上抓取它

您可以验证这一点(不是在生产环境中)

通过从RAM中删除数据

代码语言:javascript
复制
DBCC freeproccache
DBCC DROPcleanbuffers

现在,当您运行两次查询时,您将看到如下所示,第一次将从磁盘运行,第二次将从RAM运行

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5582324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档