选择要分析的计数器

选择要分析的计数器

我想将给定的一组 Windows 性能计数器的数据直接记录到 SQL Server 表中。Windows 是否提供了一种无需编写自定义应用程序即可执行此操作的方法?

如果是这样,那么这样做是否存在严重问题?

答案1

是的,这是可能的。以下是基于文章。

选择要分析的计数器

将本地机器上的所有计数器导出到本地文件夹。

typeperf -q  > counters.txt

编辑导出的文件,只留下要采样的计数器。我留下了以下两个:

\Processor(*)\% Processor Time
\Memory\Pages/sec

收集数据

在这里您将收集想要使用 logman 分析的数据。

创建一个集合。

logman create counter MyCollection -s %computername% -cf counters.txt

开始记录

logman MyCollection start

一旦收集到了代表性样本,就停止采集。

logman MyCollection stop

默认情况下,在 Vista 和 Windows 2008 服务器上,您的性能监视器计数器将存储在 %systemdrive%\PerfLogs\Admin 中,并以您的集合名称命名(在我们的例子中,它们将被称为 MyCollection.blg,因此,您需要转到此文件夹。

cd %systemdrive%\PerfLogs\Admin

加载到 SQL Server

创建 ODBC 数据源。警告:SQL Server Native Client 不能与 perfmon 一起使用。Perfmon 是一个 Windows 工具,只能与使用 Windows 附带的 MDAC SQLODBC 驱动程序的 DSN 一起使用。

我创建了一个名为 relogDSN 的 ODBC 数据源。ServerName 是我收集数据的服务器的名称。此名称将写入创建的 SQL Server 表 DisplayToID,当我想查看计数器时,我可以查询它。

relog MyCollection_000001.blg -f SQL -o SQL:relogDSN!ServerName

分析数据

您的计数器将被保存到表 CounterDetails、CounterData 和 DisplayToID 中,这里有一个 SQL 查询作为示例。

SELECT MachineName,
   CONVERT(DATETIME, CONVERT(VARCHAR(16), CounterDateTime)) as [Date],
   AVG(CounterValue) as Average,
   MIN(CounterValue) as Minimum,
   MAX(CounterValue) as Maximum
FROM CounterDetails
   JOIN CounterData ON CounterData.CounterID = CounterDetails.CounterID
   JOIN DisplayToID ON DisplayToID.GUID = CounterData.GUID
GROUP BY MachineName,
   CONVERT(DATETIME, CONVERT(VARCHAR(16), CounterDateTime)) 

答案2

Windows 中没有内置方法将 PerfCounters 写入 SQL 数据库。您必须编写一个工具来执行此操作。

相关内容