自定义 SQL Server 性能计数器

Posted

技术标签:

【中文标题】自定义 SQL Server 性能计数器【英文标题】:Custom SQL Server performance counters 【发布时间】:2011-11-15 15:02:20 【问题描述】:

我需要为系统运行状况检查和监控创建多个计数器。由于有许多工具可用于记录、报告和警告 Windows Perfmon 数据,因此我希望将这些数据发布为 Perfmon 计数器。

某些值需要来自 SQL Server 2008 数据库,例如用作队列的表中的记录数,以及表中最旧记录的年龄。虽然看起来这可以通过使用SQL Server, User Settable Object 和存储过程sp_user_counter1sp_user_counter10 来完成,但这将我限制为每台服务器只有10 个计数器,并且无法自定义计数器名称和描述以反映计数器是什么。

在不创建我们自己的应用程序来创建 Perfmon 计数器的情况下,还有其他方法可以在 SQL Server 中创建计数器吗?如果没有,是否有任何工具/项目允许使用 SQL 查询创建自定义计数器?

【问题讨论】:

性能监控:sentryone.com/blog/allenwhite/… 【参考方案1】:

迟到的答案 - 但可能对其他线程访问者有用

除了提到的其他解决方案,我还可以推荐一个名为 ApexSQL Monitor 的第三方工具。它允许为系统按需监控、历史趋势和警报的特定配置创建自定义 SQL 性能计数器。

自定义指标是可以添加到此工具的基于 T-SQL 的查询。这些查询收集的数据可以像其他内置指标一样进行分析和提醒。

以下文章提供了可能有用的自定义 SQL 性能计数器示例:http://solutioncenter.apexsql.com/using-custom-sql-performance-counters-to-monitor-sql-server/

【讨论】:

【参考方案2】:

我认为专门为自定义性能数据使用 SQL 服务器的唯一方法是使用十个 sp_user_counterX 存储过程。我做了一些搜索,搜索中出现的唯一结果是这些存储的过程。

我确实有另一个建议,但它需要一些编码。 This 文章解释了如何创建一个小型应用程序(无论是服务还是控制台应用程序),它允许您创建任意数量的自己的性能计数器。您可以使用它来创建自己的计数器。

在我们的组织中,我们使用 Idera 诊断管理器,我们发现它非常有用,因为我们可以使用内置指标来监控我们的服务器以及创建我们自己的计数器。我们发现它运行良好,虽然价格不菲,但它是我所知道的唯一一个不需要 SQL 服务器上的任何代理的监控工具。

【讨论】:

我们最终得出了相同的结论——编写一个自定义应用程序。我们创建了一个定期运行查询并更新计数器的设备。查询及其频率在 app.config 文件中配置。感谢 Idera 链接 - 我会检查一下。【参考方案3】:

如果您查看存储过程的源代码,您会得到:

ALTER procedure [sys].[sp_user_counter2] @newvalue int as
dbcc setinstance ('SQLServer:User Settable', 'Query', 'User counter 2', @newvalue)

=>您可以尝试使用自己的计数器名称调用 dbcc setinstance

【讨论】:

【参考方案4】:

这可以通过未记录的 DBCC 命令来完成:

要创建新指标:

dbcc addinstance ('SQLServer:User Settable', 'MyNewCounter')

改变它的值:

dbcc setinstance ('SQLServer:User Settable', 'Query', 'MyNewCounter', 5)

删除:

dbcc deleteinstance ('SQLServer:User Settable', 'MyNewCounter')

【讨论】:

以上是关于自定义 SQL Server 性能计数器的主要内容,如果未能解决你的问题,请参考以下文章

怎样获取Windows平台下SQL server性能计数器值

传入和传出字节的 SQL Server 性能计数器

用Excel创建SQL server性能报告

SQL Server数据库镜像关键性能计数器

如何通过sql server远程收集windows性能计数器

无法让 nservicebus 性能计数器在 Windows Server 2008 R2 上的开发/自主机中工作