特定のコマンドを指定回数実行して、その実行時間を計測するスクリプト

SQL Serverへの接続にかかる時間が気になったので、sqlcmdでdb接続を繰り返し行うテストのためのスクリプトを作りました。
スクリプト自体は、特定のコマンドラインを指定回数実行して、その実行時間を計測するという動作をします。

executeRepeater.ps1

<#
    .SYNOPSIS
    特定のコマンドを指定回数実行して、その実行時間を計測します。
    コマンドの標準出力は$out変数に格納の上、捨てます。
    
    .EXAMPLE
    .\executeRepeater.ps1 -commandLine "sqlcmd -S dbserver -E -d testdb -i .\exit.sql" -exeNum 100 -testNum 10
#>

[CmdletBinding()]
Param(
    [Parameter(Mandatory=$true)]
    [string]
    #実行するコマンドライン
    $commandLine,
    [Parameter(Mandatory=$true)]
    [ValidateRange(1,9999)]
    [int]
    #1計測単位のコマンドライン実行回数
    $exeNum,
    [Parameter(Mandatory=$true)]
    [ValidateRange(1,9999)]
    [int]
    #テスト試行回数
    $testNum
)

Write-Output "TestCount`tDistance(ms)"
for($testCnt=0; $testCnt -lt $testNum; $testCnt++){
    $startTime = Get-Date
    for($exeCnt=0; $exeCnt -lt $exeNum; $exeCnt++){
        $out = Invoke-Expression $commandLine
    }
    $finishTime = Get-Date
    $result = $finishTime - $startTime
    
    Write-Output "$testCnt`t$result"
}

exit.sql

exit

使い方

.\executeRepeater.ps1 -commandLine "sqlcmd -S dbserver -E -d testdb -i .\exit.sql" -exeNum 100 -testNum 10

上記は、”sqlcmd -S dbserver -E -d testdb -i .\exit.sql”を 100回繰り返し実行してその時間を計測して、それを10回計測するという動作になります。

実行結果例

TestCount	Distance(ms)
0	00:00:05.0145014
1	00:00:04.9894989
2	00:00:05.0875087
3	00:00:04.8354835
4	00:00:04.9194919
5	00:00:04.7834783
6	00:00:05.0385038
7	00:00:05.1055105
8	00:00:05.0655065
9	00:00:05.7085708

コメントを残す