SQL Server 메모리 카운터를 가져오고 값을 표시하는 powershell


9

다음 SQL Server 카운터를 캡처하기 위해 powershell 스크립트를 작성 중입니다.

SQL Server : 메모리 관리자 : 전체 서버 메모리 (KB)

SQL Server : 메모리 관리자 : 대상 서버 메모리 (KB)

내 컴퓨터에는 3 개의 SQL 서버 인스턴스가 있으므로이 스크립트가 모든 카운터를 동적으로 캡처하고 1 샘플의 값만보고하기를 원합니다. 나는 다음을 작성하려고 시도했다.

Get-counter -List *SQL*Memory* | Select paths, counter | format-list # doesn't display full list

Get-counter -List *SQL*Memory* | Select paths, counter | where {_.counter -like "*server memory*"} |format-list # displays nothing

결국 나는 -computername매개 변수를 사용하여 여러 서버에서 이것을 실행 하고 싶기 때문에 동적으로 캡처하기를 원합니다.

아무도 누락 된 것을 찾는 데 도움을 줄 수 있습니까? 다음은 내가 실행중인 정확한 스크립트입니다.

Function checkTransactionsPerSecond([string] $Hostname )
{ 
    (Get-Counter -ListSet "*Databases").Counter | Where {$_ -like "*\Transactions/sec"} #this returns nothing
#   $listofmetrics = (Get-Counter -ListSet "*Databases").Counter | Where {$_ -like "*\Transactions/sec"}
#   $listofmetrics | Get-Counter
}

clear


foreach ($Hostname in Get-Content "D:\TEMP\machines.txt")
{
    Write-Host $Hostname
    checkTransactionsPerSecond($Hostname) 
}

미리 감사드립니다

답변:


7

Aaron Bertrand는 이에 대해 매우 자세하게 설명했습니다 ... PowerShell을 사용하여 성능 카운터 데이터를 수집하는 방법 .

그런 다음 Laerte Junior는 Simple-Talk 기사 : Powershell을 사용하여 Perfmon 데이터 수집 에서 원하는 카운터를 찾는 방법을 잘 살펴 봅니다 . 이곳에서 시작하고 싶을 수도 있습니다. 그가 믿는 특정 인스턴스의 카운터를 캡처하는 데 사용하는 일부 cmdlet이 있습니다.

이것이 필요한지 확인하십시오.


$listofmetrics = (Get-Counter -ListSet "*Databases" -ComputerName $hostname).Counter | Where {$_ -like "*\Transactions/sec"}
$listofmetrics | Get-Counter

고마워요 ...하지만 가장 큰 문제는 카운터에 필터를 추가하는 것입니다. 예 : 다음을 실행하는 경우 : $ listOfMetrices = (Get-Counter -ListSet "* Databases"-ComputerName $ Hostname | where {$ _. 경로와 같은 "* \ transactions / sec"}) $ listOfMetrices | get-counter 데이터베이스 범주 아래의 모든 카운터를 표시하지만 실제로보고 싶은 것은 각 데이터베이스의 초당 트랜잭션 수입니다. 도와주세요
Manjot

조정 된 답변.

고마워 Shawn, 나는 당신이 업데이트 한 코드를 사용해 보았습니다. 그러나 지금은 카운터를 찾을 수 없습니다. (Get-Counter -ListSet "* Databases"). Counter | {$ _ -like "* \ Transactions / sec"}에서 카운터를 찾지 못했습니다. 시간 내 주셔서 감사합니다
Manjot

정말? 어떤 버전의 SQL Server를 사용하고 있습니까? 나는 이것을 Windows Server 2008 R2, SQL Server 2008 R2에서만 시도했습니다.

1
나는 또한 내 윈도우 서버 2003, SQL 2005에 시도하고 단일 카운터 반환 : \의 SQLServer : 데이터베이스 (*) \ 거래 / 초

0

이것 좀 봐:

$listofmetrics = Get-Counter -ListSet "*Databases" | Get-Counter -MaxSamples 1 | Select -ExpandProperty CounterSamples | Where {$_.path -like "\Transactions/sec"} | Select Path, CookedValue

데이터베이스 및 관련 \ Transactions / sec 목록이 출력됩니다. 검색을 시작할 때 오류가 발생하지만 권한 문제라고 생각합니다. 그렇지 않으면 아름다움처럼 작동합니다. 원하는 경우 Regex를 사용하여 정리할 수 있습니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.