PowerShell เพื่อรับตัวนับหน่วยความจำเซิร์ฟเวอร์ sql และแสดงค่า


9

ฉันกำลังเขียนสคริปต์ powershell เพื่อจับภาพเคาน์เตอร์เซิร์ฟเวอร์ SQL ต่อไปนี้:

SQL Server: ตัวจัดการหน่วยความจำ: หน่วยความจำเซิร์ฟเวอร์ทั้งหมด (KB)

SQL Server: ตัวจัดการหน่วยความจำ: หน่วยความจำเซิร์ฟเวอร์เป้าหมาย (KB)

เครื่องของฉันมีเซิร์ฟเวอร์ SQL 3 อินสแตนซ์ดังนั้นฉันต้องการให้สคริปต์นี้จับตัวนับทั้งหมดแบบไดนามิกและรายงานค่าสำหรับ 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 เพื่อรวบรวมข้อมูลตัวนับประสิทธิภาพได้อย่างไร

จากนั้นเลิร์ตจูเนียร์มีเดิน excelent ผ่านวิธีการที่เขาพบว่าตัวนับที่เขาต้องการในบทความง่าย-Talk: รวบรวมข้อมูล Perfmon กับ Powershell นี่อาจเป็นที่ที่คุณต้องการเริ่ม มี cmdlets บางอย่างที่เขาใช้เพื่อจับภาพตัวนับสำหรับอินสแตนซ์เฉพาะที่ฉันเชื่อ

ดูว่านี่คือสิ่งที่คุณต้องการ:


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

ขอบคุณสำหรับสิ่งนี้ ... แต่ปัญหาหลักที่ฉันมีคือการเพิ่มตัวกรองเพิ่มเติมไปยังตัวนับเช่นถ้าฉันเรียกใช้ต่อไปนี้: $ listOfMetrices = (Get-Counter -ListSet "* ฐานข้อมูล" - ชื่อคอมพิวเตอร์ $ Hostname | โดยที่ {$ _ เส้นทางเหมือน "* \ transaction / วินาที"}) $ listOfMetrices | get-counter มันแสดงให้ฉันเคาน์เตอร์ทั้งหมดภายใต้หมวดหมู่ฐานข้อมูล ... แต่สิ่งที่ฉันต้องการเห็นคือการทำธุรกรรม / วินาทีสำหรับแต่ละฐานข้อมูล กรุณาช่วย
Manjot

คำตอบที่ปรับ

ขอบคุณ Shawn ฉันพยายามใช้รหัสที่คุณอัปเดต แต่มันไม่สามารถหาตัวนับใด ๆ ได้ในขณะนี้ (Get-Counter -ListSet "* ฐานข้อมูล") Counter | โดยที่ {$ _-like "* \ ธุรกรรม / วินาที"} ไม่พบตัวนับใด ๆ ขอบคุณสำหรับเวลาของคุณ
Manjot

จริงๆ? คุณใช้ SQL Server เวอร์ชันใดอยู่ ฉันลองแค่นี้ใน Window Server 2008 R2, SQL Server 2008 R2

1
ฉันเพิ่งลองใช้ Window Server 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

นี่จะแสดงรายการของฐานข้อมูลและที่เกี่ยวข้อง \ ธุรกรรม / วินาที ฉันได้รับข้อผิดพลาดที่ด้านข้างของฉันเมื่อเริ่มต้นการค้นหา แต่ฉันคิดว่ามันเป็นปัญหาสิทธิ์ มิฉะนั้นมันจะทำงานเหมือนความงาม คุณสามารถใช้ Regex เพื่อทำความสะอาดหากคุณต้องการ :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.