não há uma maneira interna no Windows de gravar os PerfCounters em um banco de dados SQL. Você deve codificar uma ferramenta que faz isso.
Gostaria de registrar os dados de um determinado conjunto de contadores de desempenho do Windows diretamente nas tabelas do SQL Server. O Windows fornece uma maneira de fazer isso sem escrever um aplicativo personalizado para fazer isso?
Em caso afirmativo, há algum problema sério ao fazer isso?
não há uma maneira interna no Windows de gravar os PerfCounters em um banco de dados SQL. Você deve codificar uma ferramenta que faz isso.
Sim, é possível. Aqui está um currículo baseado em this artigo.
Exporte todos os contadores da máquina local para uma pasta local.
typeperf -q > counters.txt
Edite o arquivo exportado e deixe apenas os contadores que deseja amostrar. Eu deixei os dois abaixo:
\Processor(*)\% Processor Time
\Memory\Pages/sec
Aqui você coletará os dados que deseja analisar usando o logman.
Crie uma coleção.
logman create counter MyCollection -s %computername% -cf counters.txt
Iniciar registro
logman MyCollection start
Depois de coletar uma amostra representativa, pare a refrigeração.
logman MyCollection stop
Por padrão, nos servidores Vista e Windows 2008, os contadores do monitor de desempenho serão armazenados em% systemdrive% \ PerfLogs \ Admin e será nomeado após o nome da sua coleção (no nosso caso eles serão chamados MyCollection.blg Então, você precisa ir para esta pasta.
cd %systemdrive%\PerfLogs\Admin
Crie uma fonte de dados ODBC. Aviso : o SQL Server Native Client não pode ser usado com o perfmon. Perfmon é uma ferramenta do Windows que só pode ser usada com DSNs que usam o driver MDAC SQLODBC incluído no Windows.
Eu criei uma fonte de dados ODBC chamada relogDSN. ServerName é o nome do servidor no qual colecionei os dados. Esse nome será gravado na tabela do SQL Server DisplayToID que é criada e eu posso consultá-la quando quiser ver meus contadores.
relog MyCollection_000001.blg -f SQL -o SQL:relogDSN!ServerName
Seus contadores serão salvos nas tabelas CounterDetails, CounterData e DisplayToID, eis uma consulta SQL como exemplo.
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))