2010-07-22 2 views
0

아래 Powershell 함수를 작성하여 F5 유닛을 호출했습니다. 각 서버에 대해 반복 실행하고 각 개별 stat를 가져온 다음 SQL SMO 호출을 실행합니다.느린 Powershell 기능. 개선하는 방법?

코드가 정말 느리게 실행되고 나는 SQL 호출을 원인으로 생각하지 않는다고 생각합니다.

어떻게 파워 쉘을 개선 할 수 있습니까?

function Print-VServerStats() 
{ 

param($virtual_server); 


$VirtualServerStatistics = (Get-F5.iControl).LocalLBVirtualServer.get_statistics((, $virtual_server)); 
$VirtualServerStatisticEntry = $VirtualServerStatistics.statistics[0]; 
$Statistics = $VirtualServerStatisticEntry.statistics | ? {$_.type -eq "STATISTIC_CLIENT_SIDE_CURRENT_CONNECTIONS" -or 
                  $_.type -eq "STATISTIC_CLIENT_SIDE_MAXIMUM_CONNECTIONS" -or 
                  $_.type -eq "STATISTIC_CLIENT_SIDE_TOTAL_CONNECTIONS"}; 

foreach ($Statistic in $Statistics) 
{ 
    $val = Convert-To64Bit $Statistic.value.high $Statistic.value.low; 

    switch ($Statistic.type) { 
    "STATISTIC_CLIENT_SIDE_CURRENT_CONNECTIONS" { 
    $label = "Current Connections"; 
    } 
    "STATISTIC_CLIENT_SIDE_MAXIMUM_CONNECTIONS" { 
    $label = "Max Connections"; 
    } 
     "STATISTIC_CLIENT_SIDE_TOTAL_CONNECTIONS" { 
    $label = "Total Connections"; 
    } 
    } 
    $profcmd.Parameters["@property"].Value = $SrceName 
    $profcmd.Parameters["@propertyDesc"].Value = $label 
    $profcmd.Parameters["@ValDim1"].Value = $virtual_server 
    $profcmd.Parameters["@value"].Value = $val 
    $profcmd.Parameters["@Timestamp"].Value = $t 
    [void]$profcmd.ExecuteNonQuery() 
    } 
} 
+1

으로? 어떤 진술에 대부분 시간이 걸리는지 측정 했습니까? 병목 현상은 PowerShell이 ​​아니라 외부 소스 (SQL Server)가 될 것이라고 생각합니다. – stej

+0

참고로, 성능 분석을 위해'Measure-Command' cmdlet을 사용할 수 있습니다. Stej가 말했듯이, PowerShell은 "느린"것에 대한 잘못입니다. –

+0

감사합니다. Measure-Command cmdlet에 대해 알지 못했습니다. 그것을 사용하여 정확한 원인을 확인할 수 있는지 확인합니다. – Andrew

답변

0

우리는 F5 BigIP을 가지고 우리는 장치의 UI가 정말 정말 느린 것으로 나타났습니다. 원인을 추적하지는 못했지만 F5 장치 자체에 대한 지연이 지연 될 가능성이 큽니다. Measure-Command on

$VirtualServerStatistics = (Get-F5.iControl).LocalLBVirtualServer.get_statistics((, $virtual_server)); 

이 경우 반드시 표시해야합니다.

0

는 F5를하지 않고 테스트하기 어렵다하지만 어쩌면 당신은 대체하여 코드/단축 향상시킬 수

$Statistics = $VirtualServerStatisticEntry.statistics | ? {$_.type -eq "STATISTIC_CLIENT_SIDE_CURRENT_CONNECTIONS" -or 
                  $_.type -eq "STATISTIC_CLIENT_SIDE_MAXIMUM_CONNECTIONS" -or 
                  $_.type -eq "STATISTIC_CLIENT_SIDE_TOTAL_CONNECTIONS"}; 

은 "느린"무엇을 의미합니까

$Statistics = $VirtualServerStatisticEntry.statistics | ? {$_.type -match '^STATISTIC_CLIENT_SIDE_(CURRENT|MAXIMUM|TOTAL)_CONNECTIONS?' } 
+0

이것이 몇 밀리 초를 절약 할 수 있다고 생각하지만, 앤드류는 몇 초 (적어도)를 절약하고 싶습니다. – stej

관련 문제