我需要为系统运行状况检查和监视创建多个计数器。由于有许多用于记录,报告和警告Windows Perfmon数据的工具,我希望将该数据发布为Perfmon计数器。
某些值需要来自SQL Server 2008数据库,例如,用作队列的表中的记录数以及表中最旧记录的年龄。虽然看起来这可以通过使用SQL Server, User Settable Object和存储过程sp_user_counter1
到sp_user_counter10
来实现,但这限制了每个服务器只有10个计数器,并且计数器名称和描述无法自定义以反映计数器的内容。
如果不创建我们自己的应用程序来创建Perfmon计数器,还有其他方法可以在SQL Server中创建计数器吗?如果没有,是否有任何工具/项目允许使用SQL查询创建自定义计数器?
我认为将SQL服务器专门用于自定义perfmon数据的唯一方法是使用十个sp_user_counterX存储过程。我做了一些搜索,我搜索到的唯一结果就是这些存储过程。
我确实有另一个建议,但需要一些编码。 This文章解释了如何创建一个小应用程序(无论是服务或控制台应用程序),它允许您创建任意数量的自己的性能计数器。您可以使用它来创建自己的计数器。
在我们的组织中,我们使用Idera诊断管理器,我们发现它非常有用,因为我们可以使用内置指标来监控我们的服务器以及创建我们自己的计数器。我们发现它工作得很好,虽然价格相当高,但它是我所知道的唯一一种不需要SQL服务器上任何代理的监控工具。
迟到的答案 - 但对其他线程访问者可能有用
除了其他提到的解决方案,我可以推荐一个名为ApexSQL Monitor的第三方工具。它允许为系统按需监控,历史趋势和警报的特定配置创建自定义SQL性能计数器。
自定义指标是可以添加到此工具的基于T-SQL的查询。与其他内置指标一样,可以分析和提醒这些查询收集的数据。
下面的文章提供了可能有用的自定义SQL性能计数器的示例:http://solutioncenter.apexsql.com/using-custom-sql-performance-counters-to-monitor-sql-server/
如果查看存储过程的源代码,您会得到:
ALTER procedure [sys].[sp_user_counter2] @newvalue int as
dbcc setinstance ('SQLServer:User Settable', 'Query', 'User counter 2', @newvalue)
=>您可以尝试使用自己的计数器名称调用dbcc setinstance
这可以使用未记录的DBCC命令完成:
要创建新指标:
dbcc addinstance ('SQLServer:User Settable', 'MyNewCounter')
要改变它的价值:
dbcc setinstance ('SQLServer:User Settable', 'Query', 'MyNewCounter', 5)
删除:
dbcc deleteinstance ('SQLServer:User Settable', 'MyNewCounter')