A performance baseline is a vital part of you system documentation. A baseline should be established immediately after a new system has entered production, and should be repeated with regular intervals. That way you can see how your system performs over time and make informed decisions about when a system will have to be upgraded etc.
Creating a baseline
The primary tool you use to capture a baseline on the Windows platform is Performance Monitor (or just Performance or PerfMon). PerfMon is an MMC snap-in that enables you to record various aspects of you system. These are called objects and counters. An object can be e.g. the Processor which in turn has several counters, e.g. % Processor Time.
Which counters you capture depends on the role of the system you are establishing a baseline for. The counters captures for a SQL server are different from those captures on an Exchange Server.
This table lists some important counters. The Role column indicates which server role the counter is applicable to.
|Processor% Processor Time
|% Processor Time is the percentage of elapsed time that the processor spends to execute a non-Idle thread. It is calculated by measuring the duration of the idle thread is active in the sample interval, and subtracting that time from interval duration. (Each processor has an idle thread that consumes cycles when no other threads are ready to run). This counter is the primary indicator of processor activity, and displays the average percentage of busy time observed during the sample interval. It is calculated by monitoring the time that the service is inactive, and subtracting that value from 100%.
|A CPU time of more than 90 % for extended periods of time is generally regarded as a problem.
|Pages/sec is the rate at which pages are read from or written to disk to resolve hard page faults. This counter is a primary indicator of the kinds of faults that cause system-wide delays. It is the sum of Memory\Pages Input/sec and Memory\Pages Output/sec. It is counted in numbers of pages, so it can be compared to other counts of pages, such as Memory\Page Faults/sec, without conversion. It includes pages retrieved to satisfy faults in the file system cache (usually requested by applications) non-cached mapped memory files.
|Although it is normal to have some spikes, this counter generally remains at or close to zero.
|PhysicalDiskAvg. Disk Queue Length
|Avg. Disk Queue Length is the average number of both read and write requests that were queued for the selected disk during the sample interval.
|The number of requests should not exceed two times the number of spindles constituting the physical disk. If the number of requests is too high, you can add additional disks or replace the existing disks with faster disks.
|PhysicalDiskAvg. Disk sec/Read
|Avg. Disk sec/Read is the average time, in seconds, of a read of data from the disk.
|Should not be above 25 ms.
|PhysicalDiskAvg. Disk sec/Write
|Avg. Disk sec/Write is the average time, in seconds, of a write of data to the disk.
|Should not be above 25 ms.
|CLI utility included in Windows Server 2003 and newer.
|Logman manages the “Performance Logs and Alerts” service for creating and
managing Event Trace Session logs and Performance logs.
|Can also be launched by using perfmon.msc
|Performance Analysis of Logs (PAL) Tool
|Open source utility on Codeplex
|ExPerfWiz is a powershell based script to help automate the collection of performance data on Exchange 2007 and Exchange 2010 servers.
|Automate the collection of Performance monitor logs using logman.exe
|Relog creates new performance logs from data in existing performance logs by changing the sampling rate and/or converting the file format.
|Supports all performance log formats, including Windows NT 4.0 compressed logs.
|Typeperf writes performance data to the command window or to a log file.
|Tracerpt processes binary Event Trace Session log files or real-time streams from instrumented Event Trace providers
and creates a report or a text (CSV) file describing the events generated.
Establish a one week performance baseline for a Domain Controller:
logman.exe create counter “Active Directory Baseline (1 Week)” -c “Processor(*)% Processor Time” “NTDS*” “DNS*” “PhysicalDisk(*)Avg. Disk Queue Length” “MemoryPages/sec” -max 50 -rf 168:00:00 -cnf