SQL Server Performance Monitoring Tools: Third Party Tools: These tools (SQL Sentry, Toad, Embarcadero, SpotLight etc ) usually span all combination of environments and can produce valuable reports. Data Collection Tool: This tool is available for SQL Server 2008 and up, it is a data collection tool leveraging the DMV (Dynamic Management Views) with SQL Server to collect operational data and store in a Data Warehouse database for reporting. Most installations do not use it but some do. SQL Profiler: Available on all instance of SQL Server 2000 and up, it is very useful but also very resource intensive and usually not run in production environments without specific constraints or for a limit period of time. Dynamic Management Views: Available on SQL Server 2005 and above, using TSQL queries these views can provide a wide variety of information. Perfmon: Available on all Windows servers, can gather OS operational counter as well as SQL Server counters if the SQL Server counters are installed on the system. Some homegrown tools: Some DBA s will use their own tools that are a combination of above or none of the above to gather performance statistics and store them in a user database, later to be used for reporting. Perfmon Counters and Descriptions:
Counter LogicalDisk(*)\Avg. Disk Queue Length LogicalDisk(*)\Avg. Disk sec/read LogicalDisk(*)\Avg. Disk sec/transfer LogicalDisk(*)\Avg. Disk sec/write LogicalDisk(*)\Disk Read Bytes/sec LogicalDisk(*)\Disk Reads/sec LogicalDisk(*)\Disk Transfers/sec LogicalDisk(*)\Disk Write Bytes/sec LogicalDisk(*)\Disk Writes/sec PhysicalDisk(*)\Avg. Disk Queue Length PhysicalDisk(*)\Avg. Disk sec/read PhysicalDisk(*)\Avg. Disk sec/transfer PhysicalDisk(*)\Avg. Disk sec/write PhysicalDisk(*)\Disk Read Bytes/sec PhysicalDisk(*)\Disk Reads/sec PhysicalDisk(*)\Disk Transfers/sec PhysicalDisk(*)\Disk Write Bytes/sec PhysicalDisk(*)\Disk Writes/sec Processor(_Total)\% Idle Time SQLServer:Buffer Manager\Buffer cache hit ratio SQLServer:Buffer Manager\Checkpoint pages/sec SQLServer:Buffer Manager\Lazy writes/sec SQLServer:Buffer Manager\Page life expectancy SQLServer:Buffer Manager\Stolen pages SQLServer:Buffer Manager\Target pages SQLServer:Buffer Manager\Total pages SQLServer:General Statistics\Transactions SQLServer:General Statistics\User Connections SQLServer:SQL Statistics\SQL Compilations/sec SQLServer:SQL Statistics\SQL Re-Compilations/sec SQLServer:SQL Statistics\Batch Requests/sec Description Avg IO Requests Waiting for each logical disk. Read Latency for each logical disk. IOPS Latency for each logical disk. Write Latency for each logical disk. Amount of Reads bytes per scond for each logical disk Number of disk Reads per scond for each logical disk IOPS for each logical disk. Amount of Write bytes per scond for each logical disk Number of disk Writes per scond for each logical disk Avg IO Requests Waiting for each physical disk. Read Latency for each physical disk. IOPS Latency for each physical disk. Write Latency for each physical disk. Amount of Reads bytes per scond for each physical disk Number of disk Reads per scond for each physical disk IOPS for each physical disk. Amount of Write bytes per scond for each physical disk Number of disk Writes per scond for each physical disk % Cpu Idle How often the page requested is found in memory. How many database pages are written to disk, for checkpointing. How many database pages are written to disk, for lazywriting. How long is a database page expected to last in memory. Number of pages that were stolen from the buffer cache for other requests. Total machine memory pages. Total machine memory pages. Number of Transactions Processed Number of Users The number of times per second that SQL Server compilations have occurred The number of times per second that SQL Server re-compilations have occurred This counter measures the number of batch requests that SQL Server receives. <?xml version="1.0" encoding="utf-16"?> <DataCollectorSet> <Status>0</Status> <Duration>0</Duration>
<Description> </Description> <DescriptionUnresolved> </DescriptionUnresolved> <DisplayName> </DisplayName> <DisplayNameUnresolved> </DisplayNameUnresolved> <SchedulesEnabled>-1</SchedulesEnabled> <LatestOutputLocation> </LatestOutputLocation> <Name>VoilinCollectorSet</Name> <OutputLocation>C:\PerfLogs\</OutputLocation> <RootPath>C:\PerfLogs\</RootPath> <Segment>0</Segment> <SegmentMaxDuration>0</SegmentMaxDuration> <SegmentMaxSize>0</SegmentMaxSize> <SerialNumber>1</SerialNumber> <Server> </Server> <Subdirectory> </Subdirectory> <SubdirectoryFormat>1</SubdirectoryFormat> <SubdirectoryFormatPattern> </SubdirectoryFormatPattern> <Task> </Task> <TaskRunAsSelf>0</TaskRunAsSelf> <TaskArguments> </TaskArguments> <TaskUserTextArguments> </TaskUserTextArguments> <UserAccount>SYSTEM</UserAccount> <Security>O:BAG:S-1-5-21-2189305724-2337178403-46789441- 513D:AI(A;;FA;;;SY)(A;;FA;;;BA)(A;;FR;;;LU)(A;;0x1301ff;;;S-1-5-80-2661322625-712705077-2999183737- 3043590567-590698655)(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;0x1200ab;;;LU)(A;ID;FR;;;AU)(A;ID;FR;;;LS)(A;ID;FR;;;NS)</Se curity> <StopOnCompletion>0</StopOnCompletion> <PerformanceCounterDataCollector> <DataCollectorType>0</DataCollectorType> <Name>PerfCounters</Name> <FileName>ViolinCollecorSet</FileName> <FileNameFormat>1</FileNameFormat> <FileNameFormatPattern>yyyyMMddHHmmss</FileNameFormatPattern> <LogAppend>0</LogAppend> <LogCircular>0</LogCircular> <LogOverwrite>0</LogOverwrite>
<LatestOutputLocation> </LatestOutputLocation> <DataSourceName> </DataSourceName> <SampleInterval>5</SampleInterval> <SegmentMaxRecords>0</SegmentMaxRecords> <LogFileFormat>3</LogFileFormat> <Counter>\LogicalDisk(*)\Avg. Disk Queue Length</Counter> <Counter>\LogicalDisk(*)\Avg. Disk sec/read</counter> <Counter>\LogicalDisk(*)\Avg. Disk sec/transfer</counter> <Counter>\LogicalDisk(*)\Avg. Disk sec/write</counter> <Counter>\LogicalDisk(*)\Disk Read Bytes/sec</Counter> <Counter>\LogicalDisk(*)\Disk Reads/sec</Counter> <Counter>\LogicalDisk(*)\Disk Transfers/sec</Counter> <Counter>\LogicalDisk(*)\Disk Write Bytes/sec</Counter> <Counter>\LogicalDisk(*)\Disk Writes/sec</Counter> <Counter>\PhysicalDisk(*)\Avg. Disk Queue Length</Counter> <Counter>\PhysicalDisk(*)\Avg. Disk sec/read</counter> <Counter>\PhysicalDisk(*)\Avg. Disk sec/transfer</counter> <Counter>\PhysicalDisk(*)\Avg. Disk sec/write</counter> <Counter>\PhysicalDisk(*)\Disk Read Bytes/sec</Counter> <Counter>\PhysicalDisk(*)\Disk Reads/sec</Counter> <Counter>\PhysicalDisk(*)\Disk Transfers/sec</Counter> <Counter>\PhysicalDisk(*)\Disk Write Bytes/sec</Counter> <Counter>\PhysicalDisk(*)\Disk Writes/sec</Counter> <Counter>\Processor(_Total)\% Idle Time</Counter> <Counter>\SQLServer:Buffer Manager\Buffer cache hit ratio</counter> <Counter>\SQLServer:Buffer Manager\Checkpoint pages/sec</counter> <Counter>\SQLServer:Buffer Manager\Lazy writes/sec</counter> <Counter>\SQLServer:Buffer Manager\Page life expectancy</counter> <Counter>\SQLServer:Buffer Manager\Stolen pages</counter> <Counter>\SQLServer:Buffer Manager\Target pages</counter> <Counter>\SQLServer:Buffer Manager\Total pages</counter> <Counter>\SQLServer:General Statistics\Transactions</Counter> <Counter>\SQLServer:General Statistics\User Connections</Counter> <Counter>\SQLServer:SQL Statistics\SQL Compilations/sec</Counter> <Counter>\SQLServer:SQL Statistics\SQL Re-Compilations/sec</Counter> <Counter>\SQLServer:SQL Statistics\Batch Requests/sec</Counter> <CounterDisplayName>\LogicalDisk(*)\Avg. Disk Queue Length</CounterDisplayName> <CounterDisplayName>\LogicalDisk(*)\Avg. Disk sec/read</counterdisplayname> <CounterDisplayName>\LogicalDisk(*)\Avg. Disk sec/transfer</counterdisplayname> <CounterDisplayName>\LogicalDisk(*)\Avg. Disk sec/write</counterdisplayname> <CounterDisplayName>\LogicalDisk(*)\Disk Read Bytes/sec</CounterDisplayName> <CounterDisplayName>\LogicalDisk(*)\Disk Reads/sec</CounterDisplayName> <CounterDisplayName>\LogicalDisk(*)\Disk Transfers/sec</CounterDisplayName> <CounterDisplayName>\LogicalDisk(*)\Disk Write Bytes/sec</CounterDisplayName> <CounterDisplayName>\LogicalDisk(*)\Disk Writes/sec</CounterDisplayName>
<CounterDisplayName>\PhysicalDisk(*)\Avg. Disk Queue Length</CounterDisplayName> <CounterDisplayName>\PhysicalDisk(*)\Avg. Disk sec/read</counterdisplayname> <CounterDisplayName>\PhysicalDisk(*)\Avg. Disk sec/transfer</counterdisplayname> <CounterDisplayName>\PhysicalDisk(*)\Avg. Disk sec/write</counterdisplayname> <CounterDisplayName>\PhysicalDisk(*)\Disk Read Bytes/sec</CounterDisplayName> <CounterDisplayName>\PhysicalDisk(*)\Disk Reads/sec</CounterDisplayName> <CounterDisplayName>\PhysicalDisk(*)\Disk Transfers/sec</CounterDisplayName> <CounterDisplayName>\PhysicalDisk(*)\Disk Write Bytes/sec</CounterDisplayName> <CounterDisplayName>\PhysicalDisk(*)\Disk Writes/sec</CounterDisplayName> <CounterDisplayName>\Processor(_Total)\% Idle Time</CounterDisplayName> <CounterDisplayName>\SQLServer:Buffer Manager\Buffer cache hit ratio</counterdisplayname> <CounterDisplayName>\SQLServer:Buffer Manager\Checkpoint pages/sec</counterdisplayname> <CounterDisplayName>\SQLServer:Buffer Manager\Lazy writes/sec</counterdisplayname> <CounterDisplayName>\SQLServer:Buffer Manager\Page life expectancy</counterdisplayname> <CounterDisplayName>\SQLServer:Buffer Manager\Stolen pages</counterdisplayname> <CounterDisplayName>\SQLServer:Buffer Manager\Target pages</counterdisplayname> <CounterDisplayName>\SQLServer:Buffer Manager\Total pages</counterdisplayname> <CounterDisplayName>\SQLServer:General Statistics\Transactions</CounterDisplayName> <CounterDisplayName>\SQLServer:General Statistics\User Connections</CounterDisplayName> <CounterDisplayName>\SQLServer:SQL Statistics\SQL Compilations/sec</CounterDisplayName> <CounterDisplayName>\SQLServer:SQL Statistics\SQL Re- Compilations/sec</CounterDisplayName> <CounterDisplayName>\SQLServer:SQL Statistics\Batch Requests/sec</CounterDisplayName> </PerformanceCounterDataCollector> <DataManager> <Enabled>0</Enabled> <CheckBeforeRunning>0</CheckBeforeRunning> <MinFreeDisk>0</MinFreeDisk> <MaxSize>0</MaxSize> <MaxFolderCount>0</MaxFolderCount> <ResourcePolicy>0</ResourcePolicy> <ReportFileName>report.html</ReportFileName> <RuleTargetFileName>report.xml</RuleTargetFileName> <EventsFileName> </EventsFileName> </DataManager> </DataCollectorSet>