【问题标题】:SQL Query takes very long at random timesSQL 查询在随机时间需要很长时间
【发布时间】:2011-04-07 13:58:03
【问题描述】:

我在 SQL Server 2005 上的一个非常小的表(

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

【问题讨论】:

  • 你能监控 SQL Server 正在使用的客户端连接数吗?可能达到了某个最大限制,因此传入的客户端连接必须等待现有连接通过超时释放。
  • 你发现瓶颈是什么了吗?

标签: sql performance


【解决方案1】:

在 SSMS 中右键单击对象资源管理器中的已连接服务器并选择活动监视器。

您可以在此处查看最近的昂贵查询和其他性能数据。

【讨论】:

    【解决方案2】:

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

    您可以通过使用 statistics io on 运行来检查

    SET STATISTICS IO ON
    
    select * ..your query
    

    你应该看到这样的东西

    表“表名”。扫描计数 1,逻辑读取 4,物理读取 2

    如果你看到physical reads高于0,它是从磁盘中抓取的

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

    通过从 RAM 中删除数据

    DBCC freeproccache
    DBCC DROPcleanbuffers
    

    现在,当您运行两次查询时,您会看到类似这样的内容,第一次从磁盘运行,第二次从 RAM 运行

    表“表名”。扫描计数 1,逻辑读取 4,物理读取 2

    表“表名”。扫描计数 1,逻辑读取 4,物理读取 0

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 另一个连接到这个表的查询是什么意思。如果您只对该表执行选择语句,则不会锁定任何内容。没有获取锁。
        • 编辑了我的答案,将“查询”一词替换为“语句”。谢谢。
        猜你喜欢
        • 2016-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-09
        • 2015-05-17
        相关资源
        最近更新 更多