是否有一些(免费)工具可以读取性能计数器(Windows 2008 Server,但 2003 支持是一个奖励)并将它们添加到 MS SQL Server 2008 数据库?
不需要太花哨,因为在最坏的情况下我可以通过触发器添加“日志轮换”。
编辑:澄清一下,我想读取任何性能计数器(CPU 负载、磁盘队列、ASP.net 内容)并仅使用 SQL Server 作为数据存储。有点像内置 CSV 日志记录的工作方式。
答案1
logman.exe 和 relog.exe 是 Windows 操作系统的内置工具。请参阅Windows XP Logman.exe、Relog.exe 和 Typeperf.exe 工具的说明。
一个简短的例子将 Perfmon 二进制日志文件重新记录到 SQL
确实,从理论上讲,您可以使用 logman 直接将样本收集到 SQL,但实际上最好收集到二进制文件,然后使用 relog 将其转换为 SQL。
答案2
所以实际上您希望它以明文形式显示。Perfmon 可以直接记录到 SQL Server,但它会创建自己的架构和表。查看架构并开发自己的视图以添加到其中可能是值得的,因为这样您添加的任何计数器都会自动生成您想要对指标进行的任何计算。 架构可在此处找到. 如果你使用 relog,你需要使用本文将日期/时间进行转换
下面是一个示例查询,返回按 30 分钟间隔分组的最小值、最大值和平均值:
SELECT t2.objectname, t2.countername,
DATEADD( minute,
(DATEPART(minute,CAST(SUBSTRING(t1.counterdatetime,1,23) AS DATETIME))/30)*30,
DATEADD(hour,DATEDIFF(hour,0,CAST(SUBSTRING(t1.counterdatetime,1,23) AS DATETIME)),0)) AS Period,
AVG(t1.countervalue) AS [Avg],
MIN(t1.countervalue) AS [Min],
MAX(t1.countervalue) AS [Max]
FROM counterdata t1 INNER JOIN counterdetails t2 ON t2.counterid=t1.counterid
WHERE t2.countername = '% Processor Time' AND t2.instancename = '_Total'
AND t2.objectname = 'Processor'
GROUP BY DATEADD( minute, (DATEPART(minute,CAST(SUBSTRING(t1.counterdatetime,1,23) AS DATETIME))/30)*30,
DATEADD(hour,DATEDIFF(hour,0,CAST(SUBSTRING(t1.counterdatetime,1,23) AS DATETIME)),0)),
t2.objectname, t2.countername
ORDER BY Period
答案3
我知道这已经很老了,但我没有看到任何标记为已接受的答案,所以我会补充我的意见...
我正在寻找类似的东西,然后偶然发现了一个名为 PolyMon 的工具(http://polymon.codeplex.com/)。实际的性能计数器由 Windows 服务收集,然后存储到 SQL Server 中。管理 UI 有点笨重,但它可以工作,到目前为止我已经设置了大约 60 个计数器。