由于監控及報告需要,要統計性能計數器每天數值情況,確認數據庫服務器的運行狀況。若打開計數器填寫,比較麻煩,現在統計用 powershell 來讀取計數器的值。
第一階段:Powershell 讀取計數器文件并統計其中一個計數器的值
$startDate = (Get-Date).AddDays(-1).Date $endDate = (Get-Date).Date $perfPath = "D:/DataFiles/PERFMON/MSSQL_PERFMON_08240904.blg" #讀取文件中的計數器名稱 $counterList = Import-Counter -Path $perfPath $countersNameList = $counterList[0].countersamples | % {$_.path} #篩選指定計數器和時間重新導入PS $counter = $countersNameList -like '*Processor Time*' $counterData = Import-Counter -Path $perfPath -Counter $counter | Where-Object -FilterScript {($_.Timestamp -ge $startDate) -and ($_.Timestamp -lt $endDate)} #計算日期范圍內的數值統計 $counterInfo = $counterData | Foreach-Object {$_.CounterSamples} | Measure-Object -property CookedValue -Average -Maximum #哈希表存儲結果數據 $resultTable=@{} $resultTable."CPU 利用率——平均" = $counterInfo.Average $resultTable."CPU 利用率——最大" = $counterInfo.Maximum $resultTable
第二階段:批量統計文件中的所有計數器并導出到文件中
$startDate = (Get-Date).AddDays(-1).Date $endDate = (Get-Date).Date $perfPath = "D:/360Downloads/*.blg" #哈希表存儲結果數據 $resultTable=@{} #導入指定時間的所有計數器信息 $counterData = Import-Counter -Path $perfPath | Where-Object -FilterScript {($_.Timestamp -ge $startDate) -and ($_.Timestamp -lt $endDate)} #所有的計數器名字 $countersNameList = $counterData[0].countersamples | % {$_.Path} #遍歷每個計數器,將計算結果存儲到哈希表中 foreach($counterName in $countersNameList) { #$counterName = "http://hzc/system/threads" $counterDataOne = $counterData | Foreach-Object {$_.CounterSamples} | Where {$_.Path -like $counterName} $counterInfo = $counterDataOne | Measure-Object CookedValue -Average -Minimum -Maximum $resultTable.$($counterName+" :平均值") = $counterInfo.Average $resultTable.$($counterName+" :最小值") = $counterInfo.Minimum $resultTable.$($counterName+" :最大值") = $counterInfo.Maximum } #$resultTable.GetEnumerator() | sort Name | Format-Table -Auto #幾種方法導出到文件 $resultTable.GetEnumerator() | sort Name | Format-Table -Auto | Out-File "D:/360Downloads/PerfmonCounter.txt" $resultTable.GetEnumerator() | sort Name | Export-Csv -Path "D:/360Downloads/PerfmonCounter.txt" -Encoding "unicode" -Force $resultTable.GetEnumerator() | sort Name | Format-List | Export-Csv -Path "D:/360Downloads/PerfmonCounter.xlsx" -Encoding "unicode" -Force
新聞熱點
疑難解答