【问题标题】:What to monitor on SQL Server在 SQL Server 上监视什么
【发布时间】:2011-03-01 04:32:02
【问题描述】:

有人要求我监控 SQL Server(2005 和 2008),我想知道哪些指标值得关注?我可以访问 WMI 计数器,但对于有多少深度将是有用的有点迷茫。

目前我的清单上有:

  • 用户连接
  • 每秒登录次数
  • 每秒锁存等待次数
  • 总锁存等待时间
  • 每秒死锁数
  • 每秒错误数
  • 日志和数据文件大小

我希望能够监控表明机器性能下降或潜在严重问题的值。为此,我还想知道这些事情中的哪些值会被认为是正常的还是有问题的?

我认为,对于一般社区来说,这可能是一个非常好的问题,我想我会向你们中的一些 DBA 专家求婚(我当然不是其中之一!)

如果是一个相当开放式的问题,我们深表歉意。 瑞

【问题讨论】:

  • 这一切都取决于你对这个监控的需求。
  • 这篇文章有点老了,但可能有一些好的建议sql-server-performance.com/articles/per/…
  • 我所追求的是一个盒子有问题的迹象。意识到这真的很模糊,但理想情况下,我想将监控项目分为 3 个类别,例如“仅供参考”、“警告”和“关键”

标签: sql-server performance powershell wmi monitoring


【解决方案1】:

我还会监控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

【讨论】:

    【解决方案2】:

    迟到的答案,但可能会引起其他读者的兴趣

    我的一位同事遇到了类似的问题,并使用此线程帮助他入门。 他还看到了一篇博客文章,描述了性能问题的常见原因以及关于应该监控哪些指标的说明,除了这里已经提到的那些。这些其他指标是:

    • %磁盘时间:

    此计数器指示磁盘问题,但必须与当前磁盘队列长度计数器一起观察才能真正提供信息。还记得磁盘可能在 %Disk Time 达到 100% 之前成为瓶颈。

    • %Disk Read Time 和 %Disk Write Time:

    %Disk Read Time 和 %Disk Write Time 指标类似于 %Disk Time,只是分别显示从磁盘读取或写入磁盘的操作。它们实际上是以百分比表示的平均磁盘读取队列长度和平均磁盘写入队列长度值。

    • %空闲时间:

    测量采样间隔期间磁盘空闲的时间百分比。如果此计数器低于 20%,则磁盘系统已饱和。您可以考虑用更快的磁盘系统替换当前的磁盘系统。

    • %可用空间:

    测量所选逻辑磁盘驱动器上可用空间的百分比。请注意这是否低于 15%,因为您可能会耗尽操作系统存储关键文件的可用空间。这里一个明显的解决方案是添加更多磁盘空间。

    如果您想阅读整篇文章,可以在这里找到: http://www.sqlshack.com/sql-server-disk-performance-metrics-part-2-important-disk-performance-measures/

    【讨论】:

      【解决方案3】:

      使用 SQL Profiler 确定您的前 10 个(或更多)查询。为这些查询创建基准性能。查看当前的平均执行时间与您的基线,并在明显高于基线时发出警报。您还可以使用此列表来识别查询以进行可能的优化。

      这比仅查看详细统计数据更能解决问题,尽管这些统计数据也很有用。我发现这种方法适用于任何 DBMS,包括 MySQL 和 Oracle。如果您的最高查询时间开始增加,您可以打赌您开始遇到性能问题,然后您可以开始更详细地研究。

      【讨论】:

        【解决方案4】:

        在预算允许的情况下,值得查看一些 3rd 方工具来提供帮助。我们使用Idera's SQL Diagnostic Manager 监控服务器运行状况,使用Confio's Ignite 关注查询性能。这两种产品都在我们的商店中为我们提供了很好的服务。

        【讨论】:

          【解决方案5】:

          CPU 利用率百分比和平均磁盘队列长度也是相当标准的。 CPU 始终超过 80% 表明您可能需要更多或更好的 CPU(以及容纳它们的服务器);任何磁盘队列上始终超过 2 表示您在该驱动器上存在磁盘 I/O 瓶颈。

          【讨论】:

            【解决方案6】:

            您应该监控分配给特定进程的总页数。您可以通过查询 sys 数据库来获取该信息。

              sys.dm_exec_sessions s
               LEFT  JOIN sys.dm_exec_connections c
                    ON  s.session_id = c.session_id
               LEFT JOIN sys.dm_db_task_space_usage tsu
                    ON  tsu.session_id = s.session_id
               LEFT JOIN sys.dm_os_tasks t
                    ON  t.session_id = tsu.session_id
                    AND t.request_id = tsu.request_id
               LEFT JOIN sys.dm_exec_requests r
                    ON  r.session_id = tsu.session_id
                    AND r.request_id = tsu.request_id
               OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) TSQL
            

            以下帖子很好地解释了如何在没有任何工作时使用它来监控服务器 http://tsqltips.blogspot.com/2012/06/monitor-current-sql-server-processes.html

            【讨论】:

            • 我们还使用 Quest DB 性能分析,它可以很好地直观地了解服务器中发生的情况。这样做的坏处之一是它告诉谁是受害者,但很难弄清楚谁在消耗资源。
            【解决方案7】:

            除了上面建议的性能指标外,我强烈建议监控可用内存、批处理请求/秒、SQL 编译/秒和 SQL 重新编译/秒。所有这些都在sys.dm_os_performance_counters 视图和Windows Performance Monitor 中可用。

            至于

            理想情况下,我想将监控项目分为 3 个类别,例如“仅供参考”、“警告”和“关键”

            有许多第三方监控工具可让您创建不同严重性级别的警报,因此一旦您确定要监控的内容以及适合您的环境的推荐值,您就可以设置低、中和高警报。

            查看 Brent Ozar 关于不太有用的指标here 的文章。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-03-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-10-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多