【问题标题】:Identifying SQL Server Performance Problems识别 SQL Server 性能问题
【发布时间】:2010-09-06 02:17:45
【问题描述】:

我们的 SQL Server 2005 集群上出现零星的随机查询超时。我拥有一些使用它的应用程序,所以我正在帮助调查。在常规的 ol' Perfmon 中查看 % CPU 时间时,您当然可以看到它的变化。但是,SQL 活动监视器只给出一个进程使用的累积 CPU 和 IO 时间,而不是它当时正在使用的时间,或者在特定时间范围内使用的时间。也许我可以使用分析器并运行跟踪,但是这个集群被大量使用,我担心我会在大海捞针。我是不是找错树了?

有没有人有一些好的方法可以在这种环境中追踪昂贵的查询/进程?

【问题讨论】:

    标签: sql-server performance sql-server-2005


    【解决方案1】:

    Profiler 可能看起来像是“大海捞针”的方法,但它可能会发现一些有用的东西。尝试在数据库处于典型负载下时运行几分钟,看看是否有任何查询突出显示占用太多时间或以某种方式占用资源。虽然这样的情况可能指向一些一般性问题,但也可能与一两个网站的某些特定问题有关,在某些情况下会造成严重的混乱,从而导致整体性能非常差。

    【讨论】:

      【解决方案2】:

      我们使用 Quest 的 Spotlight 产品。显然这是对时间和金钱的投资,所以它可能在短期内对您没有帮助,但如果您有一个大型 SQL 环境,它非常有用。

      【讨论】:

        【解决方案3】:

        这将为您提供平均 CPU 时间排名前 50 的语句,请在此处查看其他脚本:http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true

        SELECT TOP 50
                qs.total_worker_time/qs.execution_count as [Avg CPU Time],
                SUBSTRING(qt.text,qs.statement_start_offset/2, 
                    (case when qs.statement_end_offset = -1 
                    then len(convert(nvarchar(max), qt.text)) * 2 
                    else qs.statement_end_offset end -qs.statement_start_offset)/2) 
                as query_text,
                qt.dbid, dbname=db_name(qt.dbid),
                qt.objectid 
        FROM sys.dm_exec_query_stats qs
        cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
        ORDER BY 
                [Avg CPU Time] DESC
        

        【讨论】:

          【解决方案4】:

          正如 Yaakov 所说,在典型负载下运行分析器几分钟并将结果保存到一个表中,这样您就可以对结果运行查询,从而更容易发现任何占用资源的查询。

          【讨论】:

            【解决方案5】:

            运行 Profiler 并过滤读取次数超过一定数量的查询。对于我处理的应用程序,任何读取次数超过 5000 次的非报告查询都值得重新审视。您的应用可能有不同的阈值,但思路是一样的。

            【讨论】:

              【解决方案6】:

              This utility by Erland Sommarskog 非常有用。

              这是您添加到数据库中的存储过程。每当您想查看哪些查询处于活动状态并获得锁、块等的清晰图片时运行它。当事情看起来很糟糕时,我经常使用它。

              【讨论】:

                【解决方案7】:

                我发现Performance Dashboard Reports 非常有帮助。它们是 Microsoft 提供的一组自定义 RS 报告。您只需在客户端 PC 上运行安装程序,然后在 SQL Server 实例上运行 setup.sql。

                之后,右键单击 SSMS 中的数据库(无论是哪个),然后转到 Reports -> Custom Reports。导航并选择默认位于 \Program Files\Microsoft SQL Server\90\Tools\PerformanceDashboard 文件夹中的 performance_dashboard_main.rdl。您只需执行一次。第一次之后,它将显示在报告列表中。

                主仪表板视图将显示一段时间内的 CPU 利用率等。您可以不时刷新它。当您看到峰值时,只需单击图表中的条形即可获取其背后的详细数据。

                【讨论】:

                  猜你喜欢
                  • 2019-04-13
                  • 1970-01-01
                  • 2015-04-05
                  • 2012-05-30
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多