<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'PowerShell' and 'performance counters'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=PowerShell,performance+counters&amp;orTags=0</link><description>Search results matching tags 'PowerShell' and 'performance counters'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>A little PowerShell syntax tip : dealing with SQL Server named instances</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2011/05/03/a-little-powershell-syntax-tip-dealing-with-sql-server-named-instances.aspx</link><pubDate>Tue, 03 May 2011 22:32:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:35415</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;This afternoon I was working on a little PowerShell script to collect some PerfMon counters. I borrowed some code from myself, and had counters represented in strings like the following (this is a greatly simplified version): &lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;Get-Counter&lt;/font&gt; &lt;font color="navy"&gt;-Counter&lt;/font&gt; &lt;font color="maroon"&gt;"\SQLServer:Wait Statistics(Average wait time (ms))\Lock waits"&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;The above code is for a default instance, but in this case I was dealing with a named instance (SQL2008R2). So I simply replaced "SQLServer:" with "MSSQL$SQL2008R2":&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;Get-Counter&lt;/font&gt; &lt;font color="navy"&gt;-Counter&lt;/font&gt; &lt;font color="maroon"&gt;"\&lt;b&gt;MSSQL$SQL2008R2&lt;/b&gt;:Wait Statistics(Average wait time (ms))\Lock waits"&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;When I ran this code, I received the following error: &lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="color:red;padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;Get-Counter : The specified object was not found on the computer.
At line:1 char:12
+ Get-Counter &amp;lt;&amp;lt;&amp;lt;&amp;lt;  -Counter "\MSSQL$SQL2008R2:Wait Statistics(*)\Lock waits"
    + CategoryInfo          : InvalidResult: (:) [Get-Counter], Exception
    + FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand &lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;The PowerShell gurus will spot the problem instantly, but &lt;b&gt;play along&lt;/b&gt;, okay? I verified the format of the object, instance and counter name using Performance Monitor, going so far as validating exact case:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://bertrandaaron.files.wordpress.com/2011/05/perfcounter.png" border="1" height="41" width="390"&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I even copied the properties to Notepad to make sure I wasn't being dumb and transcribing incorrectly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://bertrandaaron.files.wordpress.com/2011/05/pcproperty.png" border="1" height="18" width="769"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I quickly searched for examples of folks using PowerShell to pull performance counter data from named instances of SQL Server, but either there aren't many out there, or my Google-fu was weak today.&lt;/p&gt;

&lt;p&gt;I am not sure exactly why, but I looked at the Get-Counter line again, and &lt;b&gt;the $ sign jumped out at me&lt;/b&gt;. Time is money; not sure if there is a correlation there. Anyway, when I properly escaped the dollar sign with a backward apostrophe (grave accent), it worked just fine, even though it looks funny:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;Get-Counter&lt;/font&gt; &lt;font color="navy"&gt;-Counter&lt;/font&gt; &lt;font color="maroon"&gt;"\MSSQL&lt;b&gt;`&lt;/b&gt;$SQL2008R2:Wait Statistics(Average wait time (ms))\Lock waits"&lt;/font&gt;&lt;br&gt;&lt;font color="green"&gt;#---------------------------^&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;Of course, looking back, it's blindingly obvious. I just won't get those 15 minutes back, and hope to save someone else the same 15 minutes. &lt;p&gt;[The error message does not seem to indicate that it tried to 
substitute the variable with anything, or that the counter wasn't found 
because the name wasn't complete. So I spent most of my time chasing 
other avenues. I'm going to leave that rabbit hole for another day, as I spent more time writing this post than solving the original issue.]&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;</description></item><item><title>How I use PowerShell to collect Performance Counter data</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2011/01/31/how-i-use-powershell-to-collect-performance-counter-data.aspx</link><pubDate>Mon, 31 Jan 2011 12:31:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:33034</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;In a current project, I need to collect performance counters from a set of virtual machines that are performing different tasks and running a variety of workloads.&amp;nbsp; In a similar project last year, I used LogMan to collect performance data.&amp;nbsp; This time I decided to try PowerShell because, well, all the kids are doing it, I felt a little passé, and a lot of the other tasks in this project (such as building out VMs and running workloads) were already being accomplished via PowerShell.&amp;nbsp; And after all, I did include "to become better at PowerShell" as &lt;a href="http://sqlblog.com/blogs/aaron_bertrand/archive/2011/01/10/t-sql-tuesday-14-resolutions.aspx" title="http://sqlblog.com/blogs/aaron_bertrand/archive/2011/01/10/t-sql-tuesday-14-resolutions.aspx" target="_blank"&gt;one of my goals for this year&lt;/a&gt;. &lt;br&gt;&lt;/p&gt;

&lt;p&gt;I searched around and quickly found &lt;a href="http://www.youdidwhatwithtsql.com/performance-benchmarking-with-powershell/" title="http://www.youdidwhatwithtsql.com/performance-benchmarking-with-powershell/" target="_blank"&gt;this post&lt;/a&gt; from Rhys Cambell (&lt;a href="http://www.youdidwhatwithtsql.com/" title="http://www.youdidwhatwithtsql.com/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/rhyscampbell" title="http://twitter.com/rhyscampbell" target="_blank"&gt;twitter&lt;/a&gt;). He was collecting a set of counter samples every n seconds and outputting each sample to its own CSV file.&amp;nbsp; I thought this was a very useful starting point to where I wanted to be.&amp;nbsp; But, I had some troubles getting the script to work correctly at first: if I combined -ComputerName and multiple counters, I would receive this error:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="color:red;padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;Get-Counter : Unable to connect to the specified computer or the computer is offline.&lt;br&gt;...&lt;br&gt;+ CategoryInfo          : InvalidResult: (:) [Get-Counter], Exception&lt;br&gt;+ FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;It would work fine if I either omitted -ComputerName *OR* only used one counter.&amp;nbsp; So not sure exactly what the problem was there, as it certainly wasn't a connectivity issue.&amp;nbsp; But a workaround I stumbled upon several hours later was to use the @(counter, counter) collection notation instead of the += syntax Rhys had presented.  So instead of:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#ff4500"&gt;$listOfMetrics&lt;/font&gt; &lt;font color="#a9a9a9"&gt;+=&lt;/font&gt; &lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#8b0000"&gt;"\processor(0)\% processor time"&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            &lt;br&gt;&lt;font color="#ff4500"&gt;$listOfMetrics&lt;/font&gt; &lt;font color="#a9a9a9"&gt;+=&lt;/font&gt; &lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#8b0000"&gt;"\processor(1)\% processor time"&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;br&gt;...&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;I used something more like this:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#ff4500"&gt;$listOfMetrics&lt;/font&gt; &lt;font color="#a9a9a9"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;@(&lt;/font&gt;            &lt;br&gt;    &lt;font color="#8b0000"&gt;"\processor(0)\% processor time"&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;    &lt;font color="#8b0000"&gt;"\processor(1)\% processor time"&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;    ...            &lt;br&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Because I wanted to collect different sets of metrics from different computers (some are SQL Servers, some are not), I made some slight adjustments to Rhys' script.&amp;nbsp; I made it parameterized and, based on server role, I would define a different set of counters.&amp;nbsp; This would allow me to very easily call the same script with slightly different arguments for each of the servers I wanted to monitor.&amp;nbsp; My script (CollectPerf.ps1) looks like this - for brevity, I'm not going to list out all of the roles and all of the counters I'm actually collecting, but it should give you an idea of how to collect different counters for different computers or roles:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#00008b"&gt;param&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$server&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$role&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$test&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#008080"&gt;[int]&lt;/font&gt;&lt;font color="#ff4500"&gt;$delay&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#008080"&gt;[int]&lt;/font&gt;&lt;font color="#ff4500"&gt;$count&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$path&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;            &lt;br&gt;            &lt;br&gt;&lt;font color="#00008b"&gt;function&lt;/font&gt; &lt;font color="#8a2be2"&gt;CollectPerf&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt;            &lt;br&gt;  &lt;font color="#00008b"&gt;param&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;            &lt;br&gt;    &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$server&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;    &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$role&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;    &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$test&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;    &lt;font color="#008080"&gt;[int]&lt;/font&gt;&lt;font color="#ff4500"&gt;$delay&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;    &lt;font color="#008080"&gt;[int]&lt;/font&gt;&lt;font color="#ff4500"&gt;$count&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;    &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$path&lt;/font&gt;            &lt;br&gt;  &lt;font color="#000000"&gt;)&lt;/font&gt;            &lt;br&gt;            &lt;br&gt;    &lt;font color="#00008b"&gt;if&lt;/font&gt; &lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#ff4500"&gt;$role&lt;/font&gt; &lt;font color="#a9a9a9"&gt;-eq&lt;/font&gt; &lt;font color="#8b0000"&gt;"app server"&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;            &lt;br&gt;    &lt;font color="#000000"&gt;{&lt;/font&gt;            &lt;br&gt;      &lt;font color="#ff4500"&gt;$counters&lt;/font&gt; &lt;font color="#a9a9a9"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;@(&lt;/font&gt;&lt;font color="#8b0000"&gt;"\Processor(_Total)\% Processor Time"&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;        &lt;font color="#8b0000"&gt;"\System\Processor Queue Length"&lt;/font&gt;            &lt;br&gt;        &lt;font color="#006400"&gt;# -- other counters&lt;/font&gt;            &lt;br&gt;      &lt;font color="#000000"&gt;)&lt;/font&gt;            &lt;br&gt;    &lt;font color="#000000"&gt;}&lt;/font&gt;            &lt;br&gt;            &lt;br&gt;    &lt;font color="#00008b"&gt;if&lt;/font&gt; &lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#ff4500"&gt;$role&lt;/font&gt; &lt;font color="#a9a9a9"&gt;-eq&lt;/font&gt; &lt;font color="#8b0000"&gt;"db server"&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;            &lt;br&gt;    &lt;font color="#000000"&gt;{&lt;/font&gt;            &lt;br&gt;      &lt;font color="#ff4500"&gt;$counters&lt;/font&gt; &lt;font color="#a9a9a9"&gt;=&lt;/font&gt; &lt;font color="#000000"&gt;@(&lt;/font&gt;&lt;font color="#8b0000"&gt;"\PhysicalDisk(_Total)\Avg. Disk sec/Read"&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            &lt;br&gt;        &lt;font color="#8b0000"&gt;"\SQLServer:SQL Statistics\Batch Requests/sec"&lt;/font&gt;            &lt;br&gt;        &lt;font color="#006400"&gt;# -- other counters&lt;/font&gt;            &lt;br&gt;      &lt;font color="#000000"&gt;)&lt;/font&gt;            &lt;br&gt;    &lt;font color="#000000"&gt;}&lt;/font&gt;            &lt;br&gt;            &lt;br&gt;    &lt;font color="#006400"&gt;# other roles...&lt;/font&gt;            &lt;br&gt;            &lt;br&gt;    &lt;font color="#ff4500"&gt;$sequence&lt;/font&gt; &lt;font color="#a9a9a9"&gt;=&lt;/font&gt; &lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            &lt;br&gt;            &lt;br&gt;    &lt;font color="#ff4500"&gt;$metrics&lt;/font&gt; &lt;font color="#a9a9a9"&gt;=&lt;/font&gt; &lt;font color="#0000ff"&gt;Get-Counter&lt;/font&gt; &lt;font color="#000080"&gt;-ComputerName&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt; &lt;font color="#000080"&gt;-Counter&lt;/font&gt; &lt;font color="#ff4500"&gt;$counters&lt;/font&gt; &lt;font color="#000080"&gt;-SampleInterval&lt;/font&gt; &lt;font color="#ff4500"&gt;$delay&lt;/font&gt; &lt;font color="#000080"&gt;-MaxSamples&lt;/font&gt; &lt;font color="#ff4500"&gt;$count&lt;/font&gt;            &lt;br&gt;            &lt;br&gt;    &lt;font color="#00008b"&gt;foreach&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#ff4500"&gt;$metric&lt;/font&gt; &lt;font color="#00008b"&gt;in&lt;/font&gt; &lt;font color="#ff4500"&gt;$metrics&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;            &lt;br&gt;    &lt;font color="#000000"&gt;{&lt;/font&gt;            &lt;br&gt;      &lt;font color="#ff4500"&gt;$obj&lt;/font&gt; &lt;font color="#a9a9a9"&gt;=&lt;/font&gt; &lt;font color="#ff4500"&gt;$metric&lt;/font&gt;&lt;font color="#a9a9a9"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;CounterSamples&lt;/font&gt; &lt;font color="#a9a9a9"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;Select-Object&lt;/font&gt; &lt;font color="#000080"&gt;-Property&lt;/font&gt; &lt;font color="#8a2be2"&gt;Path&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#8a2be2"&gt;CookedValue&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#8a2be2"&gt;Timestamp&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            &lt;br&gt;      &lt;font color="#006400"&gt;# add these columns as data&lt;/font&gt;            &lt;br&gt;      &lt;font color="#ff4500"&gt;$obj&lt;/font&gt; &lt;font color="#a9a9a9"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;Add-Member&lt;/font&gt; &lt;font color="#000080"&gt;-MemberType&lt;/font&gt; &lt;font color="#8a2be2"&gt;NoteProperty&lt;/font&gt; &lt;font color="#000080"&gt;-Name&lt;/font&gt; &lt;font color="#8a2be2"&gt;Sequence&lt;/font&gt; &lt;font color="#000080"&gt;-Value&lt;/font&gt; &lt;font color="#ff4500"&gt;$sequence&lt;/font&gt; &lt;font color="#000080"&gt;-Force&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            &lt;br&gt;      &lt;font color="#ff4500"&gt;$obj&lt;/font&gt; &lt;font color="#a9a9a9"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;Add-Member&lt;/font&gt; &lt;font color="#000080"&gt;-MemberType&lt;/font&gt; &lt;font color="#8a2be2"&gt;NoteProperty&lt;/font&gt; &lt;font color="#000080"&gt;-Name&lt;/font&gt; &lt;font color="#8a2be2"&gt;LoadTest&lt;/font&gt; &lt;font color="#000080"&gt;-Value&lt;/font&gt; &lt;font color="#ff4500"&gt;$test&lt;/font&gt;     &lt;font color="#000080"&gt;-Force&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            &lt;br&gt;      &lt;font color="#ff4500"&gt;$obj&lt;/font&gt; &lt;font color="#a9a9a9"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;Add-Member&lt;/font&gt; &lt;font color="#000080"&gt;-MemberType&lt;/font&gt; &lt;font color="#8a2be2"&gt;NoteProperty&lt;/font&gt; &lt;font color="#000080"&gt;-Name&lt;/font&gt; &lt;font color="#8a2be2"&gt;Computer&lt;/font&gt; &lt;font color="#000080"&gt;-Value&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt;   &lt;font color="#000080"&gt;-Force&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            &lt;br&gt;      &lt;font color="#006400"&gt;# export with unique file name&lt;/font&gt;            &lt;br&gt;      &lt;font color="#ff4500"&gt;$obj&lt;/font&gt; &lt;font color="#a9a9a9"&gt;|&lt;/font&gt; &lt;font color="#0000ff"&gt;Export-Csv&lt;/font&gt; &lt;font color="#000080"&gt;-Path&lt;/font&gt; &lt;font color="#8b0000"&gt;"$path$server.$test.$sequence.csv"&lt;/font&gt; &lt;font color="#000080"&gt;-NoTypeInformation&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            &lt;br&gt;      &lt;font color="#ff4500"&gt;$sequence&lt;/font&gt; &lt;font color="#a9a9a9"&gt;+=&lt;/font&gt; &lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            &lt;br&gt;    &lt;font color="#000000"&gt;}&lt;/font&gt;            &lt;br&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;            &lt;br&gt;&lt;font color="#0000ff"&gt;CollectPerf&lt;/font&gt; &lt;font color="#000080"&gt;-server&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt; &lt;font color="#000080"&gt;-role&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt; &lt;font color="#000080"&gt;-test&lt;/font&gt; &lt;font color="#ff4500"&gt;$test&lt;/font&gt; &lt;font color="#000080"&gt;-delay&lt;/font&gt; &lt;font color="#ff4500"&gt;$delay&lt;/font&gt; &lt;font color="#000080"&gt;-count&lt;/font&gt; &lt;font color="#ff4500"&gt;$count&lt;/font&gt; &lt;font color="#000080"&gt;-path&lt;/font&gt; &lt;font color="#ff4500"&gt;$path&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, the problem with the script approach is that if I wanted to simultaneously collect metrics from different servers involved in the workload, I would expect to be able to do this (let's pretend there are only two arguments, again for brevity):&lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#8b0000"&gt;"server1"&lt;/font&gt; &lt;font color="#8b0000"&gt;"app server"&lt;/font&gt;            &lt;br&gt;&lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#8b0000"&gt;"server2"&lt;/font&gt; &lt;font color="#8b0000"&gt;"database server"&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;However this runs the set of counters for server1, and doesn't start collecting for server2 until server1 is finished. Because I needed these to run asynchronously, and I didn't want to open dozens of individual PowerShell windows, I realized I should use a PowerShell job. So I could instead do this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#0000ff"&gt;StartJob&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#8b0000"&gt;"server1"&lt;/font&gt; &lt;font color="#8b0000"&gt;"app server"&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt;             &lt;br&gt;&lt;font color="#0000ff"&gt;StartJob&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#8b0000"&gt;"server2"&lt;/font&gt; &lt;font color="#8b0000"&gt;"database server"&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Which worked fine if I hard-coded the arguments.&amp;nbsp; But another strange thing happened with this syntax (admittedly, it's not "strange" - just strange to me) when I tried to parameterize the server and role.&amp;nbsp; If I used any of these conventions (and several other attempts I've omitted for their silliness):&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#0000ff"&gt;Start-Job&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;             &lt;br&gt;&lt;font color="#0000ff"&gt;Start-Job&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt; &lt;font color="#000080"&gt;-ArgumentList&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;             &lt;br&gt;&lt;font color="#0000ff"&gt;Start-Job&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt; &lt;font color="#000080"&gt;-ArgumentList&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;             &lt;br&gt;&lt;font color="#0000ff"&gt;Start-Job&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt; &lt;font color="#000080"&gt;-ArgumentList&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;             &lt;br&gt;&lt;font color="#0000ff"&gt;Start-Job&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt; &lt;font color="#000080"&gt;-ArgumentList&lt;/font&gt; &lt;font color="#ff4500"&gt;$server&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;In each case the job would start fine (or return an error about params), but even though it would run, it was clear from the output that the parameters
 were not passed in correctly (they were treated as empty strings).&amp;nbsp; So 
instead I tried this, once again switching to @(arg, arg) notation...
&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#0000ff"&gt;Start-Job&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt; &lt;font color="#000080"&gt;-ArgumentList&lt;/font&gt; &lt;font color="#000000"&gt;@(&lt;/font&gt;&lt;font color="#ff4500"&gt;$server&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$role&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;...and suddenly all was well with the world.&amp;nbsp; (I talked about this in a recent blog post, entitled, "&lt;a href="http://sqlblog.com/blogs/aaron_bertrand/archive/2011/01/29/powershell-start-job-scriptblock-sad-panda-face.aspx" title="http://sqlblog.com/blogs/aaron_bertrand/archive/2011/01/29/powershell-start-job-scriptblock-sad-panda-face.aspx" target="_blank"&gt;PowerShell, Start-Job, -ScriptBlock = sad panda face&lt;/a&gt;.")&amp;nbsp; So, if you're trying to use Start-Job with -ScriptBlock, keep this convention in mind.&amp;nbsp; Once I had the syntax down, I was able to collect metrics from dozens of servers using one command line call, by creating a second PowerShell script (CollectPerfAcrossServers.ps1) with this code and a command for each of the servers I was interested in:&lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#00008b"&gt;param&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$test&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#008080"&gt;[int]&lt;/font&gt;&lt;font color="#ff4500"&gt;$delay&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#008080"&gt;[int]&lt;/font&gt;&lt;font color="#ff4500"&gt;$count&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$path&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;             
&lt;font color="#00008b"&gt;function&lt;/font&gt; &lt;font color="#8a2be2"&gt;CollectPerfAcrossServers&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt;            
  &lt;font color="#00008b"&gt;param&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;            
      &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$test&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            
      &lt;font color="#008080"&gt;[int]&lt;/font&gt;&lt;font color="#ff4500"&gt;$delay&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;            
      &lt;font color="#008080"&gt;[int]&lt;/font&gt;&lt;font color="#ff4500"&gt;$count&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt;             
      &lt;font color="#008080"&gt;[string]&lt;/font&gt;&lt;font color="#ff4500"&gt;$path&lt;/font&gt;            
  &lt;font color="#000000"&gt;)&lt;/font&gt;            
            
  &lt;font color="#0000ff"&gt;Start-Job&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#8b0000"&gt;"VM1"&lt;/font&gt; &lt;font color="#8b0000"&gt;"db server"&lt;/font&gt;  &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;2&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;3&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt; &lt;font color="#000080"&gt;-ArgumentList&lt;/font&gt; &lt;font color="#000000"&gt;@(&lt;/font&gt;&lt;font color="#ff4500"&gt;$test&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$delay&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$count&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$path&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            
  &lt;font color="#0000ff"&gt;Start-Job&lt;/font&gt; &lt;font color="#000080"&gt;-ScriptBlock&lt;/font&gt; &lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#0000ff"&gt;C:\path\CollectPerf.ps1&lt;/font&gt; &lt;font color="#8b0000"&gt;"VM2"&lt;/font&gt; &lt;font color="#8b0000"&gt;"app server"&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;2&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#ff4500"&gt;$args&lt;/font&gt;&lt;font color="#a9a9a9"&gt;[&lt;/font&gt;&lt;font color="#800080"&gt;3&lt;/font&gt;&lt;font color="#a9a9a9"&gt;]&lt;/font&gt; &lt;font color="#000000"&gt;}&lt;/font&gt; &lt;font color="#000080"&gt;-ArgumentList&lt;/font&gt; &lt;font color="#000000"&gt;@(&lt;/font&gt;&lt;font color="#ff4500"&gt;$test&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$delay&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$count&lt;/font&gt;&lt;font color="#a9a9a9"&gt;,&lt;/font&gt; &lt;font color="#ff4500"&gt;$path&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;            
            
  &lt;font color="#006400"&gt;# ...more servers, more servers, more servers...&lt;/font&gt;            
  &lt;font color="#006400"&gt;# arguably, I should probably be pulling the list of servers and roles from a config file&lt;/font&gt;            
&lt;font color="#000000"&gt;}&lt;/font&gt;            
&lt;font color="#0000ff"&gt;CollectPerfAcrossServers&lt;/font&gt; &lt;font color="#000080"&gt;-test&lt;/font&gt; &lt;font color="#ff4500"&gt;$test&lt;/font&gt; &lt;font color="#000080"&gt;-delay&lt;/font&gt; &lt;font color="#ff4500"&gt;$delay&lt;/font&gt; &lt;font color="#000080"&gt;-count&lt;/font&gt; &lt;font color="#ff4500"&gt;$count&lt;/font&gt; &lt;font color="#000080"&gt;-path&lt;/font&gt; &lt;font color="#ff4500"&gt;$path&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Now that I have dozens of servers configured this way, I can log onto a central monitoring server and collect all of their role-based performance counters simultaneously, every 30 seconds for an hour, with this single command line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="#0000ff"&gt;C:\path\CollectPerfAcrossServers.ps1&lt;/font&gt; &lt;font color="#8b0000"&gt;"Jan.31.Baseline"&lt;/font&gt; &lt;font color="#800080"&gt;30&lt;/font&gt; &lt;font color="#800080"&gt;120&lt;/font&gt; &lt;font color="#8b0000"&gt;"C:\csv\"&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;And when I want to run a different test, all I have to change is the first argument.&amp;nbsp; Once I run this command, it fills the directory up with CSV files - it can add up quickly (one file, per server, per sample).&amp;nbsp; If I have 20 servers and collect a sample every 30 seconds for an hour, that's 2,400 files.&amp;nbsp; However, even if I am collecting 50 counters for a specific role, the files are quite small and very easy to consume.&amp;nbsp; (Note that the files won't be dumped into the folder until the last sample is collected, so to verify it's working, start with a small number of samples.)&amp;nbsp; The output is not as pretty as it could be, but it works:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;"Path","CookedValue","RawValue","Timestamp","Sequence","LoadTest","Computer"&lt;br&gt;"\\vm1\\network interface(_total)\bytes received/sec","19150.7500680961","17636201111", "1/31/2011 3:43:24 AM","58","Jan.31.Baseline","VM1"&lt;br&gt;"\\vm1\\network interface(_total)\bytes sent/sec","65151.1215576817","12987234638", "1/31/2011 3:43:24 AM","58","Jan.31.Baseline","VM1"&lt;br&gt;"\\vm1\\network interface(_total)\output queue length","0","0", "1/31/2011 3:43:24 AM","58","Jan.31.Baseline","VM1"&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;There are a couple of things worth noting here.&amp;nbsp; One is that everything is output as a string and has delimiters, so in order to perform any calculations or to get it into a table with numeric / datetime data types, you need to first strip the quotes.&amp;nbsp; The computer name is redundantly included in both the Path column and the Computer column - I could have left the extra Computer column out of the CSV, but it's just as easy to parse it out of the Path after load - however the Path value is exported as lower case to the CSV file, so that needs to be accounted for as well.&amp;nbsp; Another thing to watch out for is that the output for the Timestamp property obeys regional settings of the collecting machine, so if you are pulling counters on a server with mm/dd/yyyy and loading the data into a SQL Server that is using dd/mm/yyyy, you're going to need to manually convert the original string to the correct regional format.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Once I sorted those variables out, I created a table that would house all this data, and whipped up the T-SQL that would generate BULK INSERT commands for all of the files and then move everything to a table with proper datatypes and with string delimiters removed:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;CREATE TABLE &lt;/font&gt;&lt;font color="black"&gt;dbo.PerfCounters_Staging&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Path]      &lt;/font&gt;&lt;font color="blue"&gt;NVARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;255&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;CookedValue &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;[Timestamp] &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Sequence] &lt;/font&gt;&lt;font color="blue"&gt; VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;12&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;LoadTest &lt;/font&gt;&lt;font color="blue"&gt;   VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;Computer &lt;/font&gt;&lt;font color="blue"&gt;   VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;);&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;CREATE TABLE &lt;/font&gt;&lt;font color="black"&gt;dbo.PerfCounters&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Path]      &lt;/font&gt;&lt;font color="blue"&gt;NVARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;255&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;CookedValue &lt;/font&gt;&lt;font color="blue"&gt;DECIMAL&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;18&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;5&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;[Timestamp] &lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;DATETIME&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Sequence]  &lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;SMALLINT&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;LoadTest &lt;/font&gt;&lt;font color="blue"&gt;   VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;Computer    &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;);&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="green"&gt;-- generate bulk insert commands&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;CREATE TABLE &lt;/font&gt;&lt;font color="#434343"&gt;#c&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;2048&lt;/font&gt;&lt;font color="gray"&gt;));&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;SET NOCOUNT ON;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;INSERT &lt;/font&gt;&lt;font color="#434343"&gt;#c &lt;/font&gt;&lt;font color="blue"&gt;EXEC MASTER&lt;/font&gt;&lt;font color="black"&gt;..&lt;/font&gt;&lt;font color="darkred"&gt;xp_cmdshell &lt;/font&gt;&lt;font color="red"&gt;'dir /b "C:\csv\"'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;&lt;br&gt;SELECT &lt;/font&gt;&lt;font color="red"&gt;'SET NOCOUNT ON;'&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="red"&gt;'BULK INSERT dbo.PerfCounters_Staging FROM "C:\csv\' &lt;/font&gt;&lt;font color="gray"&gt;+ &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="gray"&gt;+ &lt;/font&gt;&lt;font color="red"&gt;'"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WITH (FIRSTROW = 2, ROWTERMINATOR=''\n'', FIELDTERMINATOR='','');'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="#434343"&gt;#c &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;IS &lt;/font&gt;&lt;font color="gray"&gt;NOT NULL;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;DROP TABLE &lt;/font&gt;&lt;font color="#434343"&gt;#c&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;When I was done with a load test, I would run the above command (with SSMS set Results to Text), focus on the results pane, press Ctrl+A, press Ctrl+C, then paste the lot to a new SSMS window, and then finally run that script.&amp;nbsp; Then I would run this command to clean it up and put it into the real table:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;DELETE &lt;/font&gt;&lt;font color="black"&gt;dbo.PerfCounters&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;LoadTest &lt;/font&gt;&lt;font color="blue"&gt;IN &lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;SELECT DISTINCT &lt;/font&gt;&lt;font color="black"&gt;LoadTest&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;dbo.PerfCounters_Staging&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;LoadTest &lt;/font&gt;&lt;font color="gray"&gt;&amp;gt; &lt;/font&gt;&lt;font color="red"&gt;''&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;INSERT &lt;/font&gt;&lt;font color="black"&gt;dbo.PerfCounters&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Path]&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;CookedValue&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;[Timestamp]&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Sequence]&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;Computer&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;LoadTest&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Path]      =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="magenta"&gt;REPLACE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="magenta"&gt;REPLACE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;[Path]&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;'\\' &lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;                  + &lt;/font&gt;&lt;font color="magenta"&gt;RTRIM&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font&gt;&lt;font color="magenta"&gt;LOWER&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;Computer&lt;/font&gt;&lt;font color="gray"&gt;)&lt;/font&gt;&lt;font color="gray"&gt;) + &lt;/font&gt;&lt;font color="red"&gt;'\'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;''&lt;/font&gt;&lt;font color="gray"&gt;), &lt;/font&gt;&lt;font color="red"&gt;'"'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;''&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;CookedValue =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="magenta"&gt;REPLACE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;CookedValue&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;'"'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;''&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;[Timestamp] =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="magenta"&gt;REPLACE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;[Timestamp]&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;'"'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;''&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Sequence]  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="magenta"&gt;REPLACE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;[Sequence]&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;'"'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;''&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[Computer]  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="magenta"&gt;REPLACE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;Computer&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;'"'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;''&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;[LoadTest]  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="magenta"&gt;REPLACE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;[LoadTest]&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;'"'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="red"&gt;''&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;FROM&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="black"&gt;dbo.PerfCounters_Staging&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Then I would empty out the folder manually (I could automate that too, but I wasn't running 500 tests a day, so it seemed to be of little benefit).&amp;nbsp; Now I had the data loaded for that specific test; I just had to be careful to make my test names unique - so I would include the date and, if necessary, some other identifier in the test name.&amp;nbsp; This kept tests unique but, if necessary, allowed me to re-run a specific test later, without having to go back and manually delete anything from the database. &lt;/p&gt;

&lt;p&gt;Now I could query away.&amp;nbsp; The reason I included the [Sequence] column is so that I could correlate the event order across multiple tests, without worrying about specific datetime information, rounding, etc.&amp;nbsp; This let me easily compare any given metric between tests run on different days.&amp;nbsp; I wrote two generic stored procedures that would allow me to compare anywhere from 2-5 different tests on a given system; one would give me the average and maximum values for a certain counter, and the other would give me the series:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;CREATE PROCEDURE &lt;/font&gt;&lt;font color="black"&gt;[dbo].[Perf_AvgMax]&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@counter&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;255&lt;/font&gt;&lt;font color="gray"&gt;) =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'\processor(_total)\% processor time'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@computer &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'VM1'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'Jan.31.Baseline'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'Jan.31.TPCLoadA'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="gray"&gt;NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="gray"&gt;NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="gray"&gt;NULL&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp; SET NOCOUNT ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;   &lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;SELECT&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt; &lt;/font&gt;&lt;font color="black"&gt;computer =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@computer&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;[counter] =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@counter&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;   SELECT &lt;/font&gt;&lt;font color="black"&gt;test1 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test1&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;test2 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test2&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;test3 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test3&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;&lt;br&gt;          test4 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test4&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;test5 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test5&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; ;&lt;/font&gt;&lt;font color="blue"&gt;WITH &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="black"&gt;CookedValue&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;LoadTest&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;dbo.PerfCounters&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;  WHERE &lt;/font&gt;&lt;font color="black"&gt;[Path] =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@counter&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;  AND &lt;/font&gt;&lt;font color="black"&gt;Computer =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@computer&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;AVG&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;a.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;), &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;AVG&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;b.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;AVG&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;c.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;AVG&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;d.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;AVG&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;e.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;MAX&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;a.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;), &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;MAX&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;b.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;MAX&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;c.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;MAX&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;d.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;MAX&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;e.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;a&lt;br&gt;&lt;/font&gt;&lt;font color="black"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;INNER JOIN &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;b&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;a.Sequence =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="black"&gt;b.Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;a.LoadTest =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test1&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;b.LoadTest =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test2&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="gray"&gt;OUTER &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;c&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;b.Sequence =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="black"&gt;c.Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;c.LoadTest =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test3&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="gray"&gt;OUTER &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;d&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;c.Sequence =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="black"&gt;d.Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;d.LoadTest =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test4&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="gray"&gt;OUTER &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;e&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;d.Sequence =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="black"&gt;e.Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;e.LoadTest = &lt;/font&gt;&lt;font color="#434343"&gt;@test5&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;END&lt;br&gt;GO&lt;br&gt;&lt;/font&gt;&lt;font color="black"&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;CREATE PROCEDURE &lt;/font&gt;&lt;font color="black"&gt;[dbo].[Perf_Series]&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@counter&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;255&lt;/font&gt;&lt;font color="gray"&gt;) =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'\processor(_total)\% processor time'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@computer &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'VM1'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'Jan.31.Baseline'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'Jan.31.TPCLoadA'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="gray"&gt;NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="gray"&gt;NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="#434343"&gt;@test5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;32&lt;/font&gt;&lt;font color="gray"&gt;)  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="gray"&gt;NULL&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp; SET NOCOUNT ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="gray"&gt;   &lt;/font&gt;&lt;font&gt;&lt;font color="blue"&gt;SELECT&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt; &lt;/font&gt;&lt;font color="black"&gt;computer =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@computer&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;[counter] =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@counter&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;   SELECT &lt;/font&gt;&lt;font color="black"&gt;test1 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test1&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;test2 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test2&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;test3 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test3&lt;/font&gt;&lt;font color="gray"&gt;, &lt;br&gt;          &lt;/font&gt;&lt;font color="black"&gt;test4 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test4&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;test5 =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test5&lt;/font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;br&gt;&lt;font color="gray"&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; ;&lt;/font&gt;&lt;font color="blue"&gt;WITH &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="black"&gt;CookedValue&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;LoadTest&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;dbo.PerfCounters&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;  WHERE &lt;/font&gt;&lt;font color="black"&gt;[Path] =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@counter&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;  AND &lt;/font&gt;&lt;font color="black"&gt;Computer =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@computer&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;a.[Sequence]&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;test1 = a.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;test2 = b.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;test3 = c.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;test4 = d.CookedValue&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="black"&gt;test5 = e.CookedValue&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;a&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;INNER JOIN &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;b&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;a.Sequence =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="black"&gt;b.Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;a.LoadTest =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test1&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;b.LoadTest =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test2&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="gray"&gt;OUTER &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;c&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;b.Sequence =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="black"&gt;c.Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;c.LoadTest =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test3&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="gray"&gt;OUTER &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;d&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;c.Sequence =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="black"&gt;d.Sequence&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;d.LoadTest =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="#434343"&gt;@test4&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="gray"&gt;OUTER &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;x &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;e&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;d.[Sequence] =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="black"&gt;e.[Sequence]&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;e.LoadTest = &lt;/font&gt;&lt;font color="#434343"&gt;@test5&lt;/font&gt;&lt;font color="gray"&gt;&lt;br&gt;   ORDER BY &lt;/font&gt;&lt;font&gt;&lt;font color="black"&gt;a.Sequence&lt;/font&gt;&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;font color="blue"&gt;END&lt;br&gt;GO&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;So to compare seconds per disk write on VM1 during three different load tests, I could run this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;EXEC &lt;/font&gt;&lt;font color="black"&gt;dbo.Perf_Series&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@computer =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'VM1'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@counter  =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'\Processor(_Total)\% Processor Time'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@test1    =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'Jan.31.Baseline'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@test2    =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'Jan.31.TCPLoadA'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#434343"&gt;@test3    =&lt;/font&gt;&lt;font color="blue"&gt; &lt;/font&gt;&lt;font color="red"&gt;'Jan.31.TCPLoadB';&lt;/font&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Results: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://sqlblog.com/files/folders/33029/download.aspx" border="1" height="363" width="580"&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, I could take those results, paste them into Excel, and build nice pretty charts with very little effort (&lt;a href="http://sqlblog.com/files/folders/33032/download.aspx" title="http://sqlblog.com/files/folders/33032/download.aspx" target="_blank"&gt;click to embiggen&lt;/a&gt;): &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://sqlblog.com/files/folders/33032/download.aspx" title="http://sqlblog.com/files/folders/33032/download.aspx" target="_blank"&gt;&lt;img src="http://sqlblog.com/files/folders/33031/download.aspx" border="1" height="400" width="700"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have my 120 samples in a chart (regardless of when I ran each test) and, while I don't see any obvious trends in this specific case, I can try various metrics and combinations to see where any performance outliers may be.&amp;nbsp; If nothing else I've proven to myself that my load tests are not CPU-bound in any way.&amp;nbsp; For this project I am interested in the ways each specific computer's counters respond to changes in input variables (most importantly, the type of load put on the system).&amp;nbsp; Of course you could write other queries around this data that compared how a certain counter responded on two servers for the same test, or several other analytic variations.&amp;nbsp; What you do with the data is a different exercise altogether; I just thought I'd share how I collect the data in the first place.&amp;nbsp; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;There are probably 20 ways to do this, and I am by no means suggesting this is the way you should do it.&amp;nbsp; I could have told PowerShell to load the data directly to the database, I could have easily generated and executed the BULK INSERT commands from PowerShell, I could have automated the reporting better using SSRS or charting tools - and there are likely 100 other ways this process could be further automated. This is just the method I settled on after a lot of trial and error, with a healthy balance of automation and manual labor.&amp;nbsp; I'll get to full PoSH automation when I'm good and ready - in the meantime, I'm all ears for suggestions, but am unlikely to change much about how I'm using this process for the project at hand. :-)&amp;nbsp; I find it fairly straightforward and easily extensible for adding servers, counters and tests.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;For some other ways to collect performance counters with PowerShell, check out these posts by Dave Ballantyne (&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/default.aspx" title="http://sqlblogcasts.com/blogs/sqlandthelike/default.aspx" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/davebally" title="http://twitter.com/davebally" target="_blank"&gt;twitter&lt;/a&gt;), Laerte Junior (&lt;a href="http://laertejuniordba.spaces.live.com/" title="http://laertejuniordba.spaces.live.com/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/LaerteSQLDBA" title="http://twitter.com/LaerteSQLDBA" target="_blank"&gt;twitter&lt;/a&gt;), and esteemed PowerShell guru Allen White (&lt;a href="http://sqlblog.com/blogs/allen_white/default.aspx" title="http://sqlblog.com/blogs/allen_white/default.aspx" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/SQLRunr" title="http://twitter.com/SQLRunr" target="_blank"&gt;twitter&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/archive/2009/11/30/my-first-useful-powershell-script-capturing-performance-counters.aspx" title="http://sqlblogcasts.com/blogs/sqlandthelike/archive/2009/11/30/my-first-useful-powershell-script-capturing-performance-counters.aspx" target="_blank"&gt;Dave Ballantyne : My first useful powershell script – capturing performance counters&lt;/a&gt;&lt;br&gt;
 
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.simple-talk.com/sql/database-administration/gathering-perfmon-data-with-powershell/" title="http://www.simple-talk.com/sql/database-administration/gathering-perfmon-data-with-powershell/" target="_blank"&gt;Laerte Junior : Gathering Perfmon Data with Powershell&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/allen_white/archive/2009/10/09/performance-data-gathering.aspx" title="http://sqlblog.com/blogs/allen_white/archive/2009/10/09/performance-data-gathering.aspx" target="_blank"&gt;Allen White : Performance Data Gathering&lt;/a&gt;&lt;br&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/allen_white/archive/2010/11/05/sql-connections-presentations.aspx" title="http://sqlblog.com/blogs/allen_white/archive/2010/11/05/sql-connections-presentations.aspx" target="_blank"&gt;Allen White : SQL Connections Presentations&lt;/a&gt; (download Allen's PowerShell decks and sample code)&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;
What I like about PowerShell so far is that it seems, unlike in T-SQL, there is no "one way" or "best way" to do something - there may be a dozen ways to skin the cat, and you can use whichever one is most intuitive or works best for you, and you can even determine what reasons help you arrive at that decision.&lt;br&gt;

&lt;p&gt;In a future post, I'll talk about how I run load tests in this environment using remote sessions and jobs.&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &lt;br&gt;&lt;/p&gt;</description></item></channel></rss>