powershell để có được bộ nhớ máy chủ sql và hiển thị giá trị


9

Tôi đang viết một tập lệnh powershell để ghi lại các bộ đếm máy chủ SQL sau:

SQL Server: Trình quản lý bộ nhớ: Tổng bộ nhớ máy chủ (KB)

SQL Server: Trình quản lý bộ nhớ: Bộ nhớ máy chủ mục tiêu (KB)

Máy của tôi có 3 phiên bản máy chủ SQL, vì vậy tôi muốn tập lệnh này tự động nắm bắt tất cả các bộ đếm và chỉ báo cáo giá trị cho 1 mẫu. tôi đã thử viết như sau:

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

cuối cùng tôi muốn chạy cái này trên nhiều máy chủ với -computernametham số và do đó tôi muốn nó tự động nắm bắt.

Bất cứ ai có thể xin vui lòng giúp tôi trong việc tìm kiếm những gì còn thiếu? Sau đây là kịch bản chính xác mà tôi đang chạy:

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) 
}

cảm ơn trước

Câu trả lời:


7

Aaron Bertrand đã viết một bài đăng hay trên đó khá chi tiết ... Cách tôi sử dụng PowerShell để thu thập dữ liệu Bộ đếm hiệu suất .

Sau đó Laerte Junior có một cuộc dạo chơi xuất sắc về cách anh ta tìm thấy các quầy mà anh ta muốn trong một bài viết Nói đơn giản: Thu thập dữ liệu Perfmon với Powershell . Đây có thể là nơi bạn muốn bắt đầu. Nó có một số lệnh ghép ngắn mà anh ta sử dụng để chụp các quầy cho một trường hợp cụ thể mà tôi tin.

EDIT: Xem nếu đây là những gì bạn cần:


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

Chỉnh sửa2 Đã thêm -ComputerName


cảm ơn vì điều này ... Nhưng vấn đề chính tôi gặp phải là thêm các bộ lọc bổ sung vào bộ đếm, ví dụ: Nếu tôi chạy như sau: $ listOfMetrices = (Get-Counter -Listset "* Cơ sở dữ liệu" -ComputerName $ Hostname | trong đó {$ _. giống như đường dẫn "* \ giao dịch / giây"}) $ listOfMetrices | get-counter Nó hiển thị cho tôi tất cả các bộ đếm trong danh mục cơ sở dữ liệu ... nhưng điều tôi thực sự muốn thấy là giao dịch / giây cho mỗi cơ sở dữ liệu. Xin hãy giúp đỡ
Manjot

câu trả lời điều chỉnh.

Cảm ơn Shawn, tôi đã thử sử dụng mã bạn cập nhật. nhưng, nó không thể tìm thấy bất kỳ quầy nào bây giờ. (Get-Counter -Listset "* Cơ sở dữ liệu"). Counter | Trong đó {$ _ -like "* \ Giao dịch / giây"} không tìm thấy bất kỳ bộ đếm nào. cảm ơn thời gian của bạn
Manjot

có thật không? Phiên bản SQL Server nào bạn đang làm việc? Tôi chỉ thử điều này trên Window Server 2008 R2, SQL Server 2008 R2.

1
Tôi cũng vừa thử trên Window Server 2003, SQL 2005 và nó trả về một bộ đếm duy nhất là: \ SQLServer: Cơ sở dữ liệu (*) \ Giao dịch / giây

0

Kiểm tra này:

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

Điều này sẽ xuất ra một danh sách các cơ sở dữ liệu và \ Giao dịch / giây được liên kết của chúng. Tôi gặp lỗi về phía tôi khi bắt đầu tìm kiếm nhưng tôi cho rằng đó là vấn đề về quyền. Nếu không, nó hoạt động như một vẻ đẹp. Bạn có thể sử dụng Regex để dọn dẹp nếu bạn muốn :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.