Медленная функция Powershell. Как улучшить? - PullRequest
0 голосов
/ 22 июля 2010

Я написал приведенную ниже функцию Powershell для вызова модуля F5.Он зацикливается на каждом сервере и получает каждую отдельную статистику, а затем выполняет SQL-вызов SMO.

Код работает очень медленно, и я думаю, что я обесценил вызов SQL в качестве причины.

Как улучшить PowerShell?

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

Ответы [ 2 ]

0 голосов
/ 23 июля 2010

сложно проверить без 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 голосов
/ 22 июля 2010

У нас есть F5 BigIP, и мы заметили, что пользовательский интерфейс на устройстве действительно очень медленный .Мы не выяснили причину, но, скорее всего, ваша задержка связана с источником F5.Measure-Command on

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

Должен показать его, если это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...