Sie sind auf Seite 1von 36

Platinum

Learn & Enjoy


[Put your phone on Vibrate!]

www.sqlbits.com

Gold

Group BY:
[Food and Drink at Reading Bowl, see you there!]

Feedback Forms:
Silver [Voucher for 30 book on return of Form]

Lunch Time Sessions:


[Idera in Everest, Quest in Memphis, Grok in Chic 1 and 2]

Ask The Experts


[Sessions need to finish on time, take questions to the ATE area]

Identifying Performance Problems with SQL Profiler


Martin Bell SQL Server MVP

Introduction
SQL Profiler is the most important tool for diagnosing poorly performing SQL in a system SQL 2005 has improved SQL Profiler to make it even more useful Combined with other tools you can build a complete performance monitoring toolkit

Perfmon Counters
New counters covers areas including CLR information, Service Broker, Notification Services sys.dm_os_performance_counters and sys.sysperfinfo Import perfmon data into SQL Profiler

Server Dashboard
Perfmon reports release with SP1 Performance at a glance, based on dynamic views
sys.dm_os_performance_counters sys.dm_exec_query_stats

Performance Dashboard Custom Reports


Download from
http://www.microsoft.com/downloads/details.aspx? FamilyId=1D3A4A0D-7E0C-4730-8204E419218C1EFC&displaylang=en

Requires SP2 Common performance problems that the dashboard reports may help to resolve include:
- CPU bottlenecks (and what queries are consuming the most CPU) - IO bottlenecks (and what queries are performing the most IO). - Index recommendations generated by the query optimizer (missing indexes) - Blocking - Latch contention

SQL Profiler
Improved interface for creating a profile Added filtering capability Deadlock Graphs Showplan XML Re-configure trace without loosing data Include Perfmon Data

Deadlock Graphs
Better detection of deadlocks No need for blocker scripts or other methods Easily identify blocking problems

-- Script 1 USE PUBS GO SELECT @@SPID AS [Windows 1 SPID] GO BEGIN TRANSACTION SELECT * FROM AUTHORS WITH (UPDLOCK) -- Results Returned immediately WAITFOR DELAY '000:00:03' SELECT * FROM TITLES WITH (UPDLOCK) -- Results Returned immediately

ROLLBACK TRANSACTION GO

-- Script 2 USE PUBS GO SELECT @@SPID AS [Windows 2 SPID] GO BEGIN TRANSACTION SELECT * FROM TITLES WITH (UPDLOCK) -- Results Returned immediately

WAITFOR DELAY '000:00:03'


SELECT * FROM AUTHORS WITH (UPDLOCK) -- Results Not Returned Immediately ROLLBACK TRANSACTION GO

Msg 1205, Level 13, State 51, Line 8 Transaction (Process ID 57) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

Define Profiler Templates


Save your own templates if you frequently require to profile certain events/columns

Changing Events without loosing Data


Unlike SQL 2000 you can pause the SQL profile, change what is being logged and then resume the profile without loosing the previous data

XML Showplan
This will help to diagnose query problems, less need to cut/paste into Management Studio Maintain old query plans and able to compare current plans to older ones

Importing Perfmon Data


If you have collected perfmon counters while a trace is running they can be imported into the SQL profiler Better collect statement level information
sp:StatementStart sp:StatementComplete

Do not trace a high number of events for a long period or you may fill up the file system!

Gotchas
Using SQL Profiler on database server can take resources Uses temp directory to storage make sure this is not on the system disc!

Server Side Traces


Script from SQL Profiler Schedule from SQL Agent Specify a duration Automate the collection and analysis Output to a file on different spindles!

Running traces
Use fn_trace_setstatus for the given trace id to change the status
0 1 2 stops the trace starts the trace closes the trace

Show running traces


Use fn_trace_getinfo to return information on the traces loaded and running. Property column:
1Trace options.
2 Trace file rolls over 4 Shutdown trace on error 8 Produce a Blackbox trace

2File name 3Max size 4Stop time 5Current trace status

Loading your own traces


If you wish to load your own traces into SQL Profiler has the option to save a loaded trace file as a trace table, or you can use the function fn_trace_gettable e.g. SELECT IDENTITY(bigint, 1, 1) AS RowNumber, * INTO dbo.trc_20061206_1 FROM ::fn_trace_gettable('c:\trc_20061206_1.trc', default)

Analysing the results


Read80Trace (SQL Server 2000) Manual Loading and Analysis ClearTrace utility

Manual Analysis
SELECT LEFT(CAST(TextData AS VARCHAR(8000)),25) AS [Procedure], COUNT(*) AS [Number of Calls], SUM([Duration]) AS [Total Duration], AVG([Duration]) AS [Average Duration], SUM([Reads]) AS [Total Reads], AVG([Reads]) AS [Average Reads], SUM([Writes]) AS [Total Write], AVG([Writes]) AS [Average Write], SUM([CPU]) AS [Total CPU], AVG([CPU]) AS [Average CPU] FROM dbo.trc_200612031629 GROUP BY LEFT(CAST(TextData AS VARCHAR(8000)),25) ORDER BY SUM([Duration]) DESC

Procedure Analysis
CREATE VIEW dbo.vw_trc_200612031629 AS SELECT LEFT(SUBSTRING(CAST(textdata as VARCHAR(8000)), CHARINDEX('usp', CAST(textdata as VARCHAR(8000)) ), CASE WHEN CHARINDEX(' ',CAST(textdata as VARCHAR(8000)), CHARINDEX(usp', CAST(textdata as VARCHAR(8000)) ) ) > 0 THEN CHARINDEX(' ',CAST(textdata as VARCHAR(8000)), CHARINDEX(usp', CAST(textdata as VARCHAR(8000)) ) ) - CHARINDEX(usp', CAST(textdata as VARCHAR(8000)) ) ELSE LEN(CAST(textdata as VARCHAR(8000))) END ),60) as [Procedure], [Duration], [Reads], [Writes], [CPU] FROM dbo.trc_200612031629 WHERE CHARINDEX(usp', CAST(textdata as VARCHAR(8000))) > 0

Procedure Analysis
SELECT [Procedure], COUNT(*) AS [Number of Calls], SUM([Duration]) AS [Total Duration], AVG([Duration]) AS [Average Duration], SUM([Reads]) AS [Total Reads], AVG([Reads]) AS [Average Reads], SUM([Writes]) AS [Total Write], AVG([Writes]) AS [Average Write], SUM([CPU]) AS [Total CPU], AVG([CPU]) AS [Average CPU] FROM dbo.vw_trc_200612031629 GROUP BY [Procedure] ORDER BY SUM([Duration]) DESC

Cleaning Data
You may also want to clean up the data, this is usually easier if you are using stored procedure as you should not need to use sp_prepare Andrew Zanevsky wrote an interesting article on Trace Scrubbing article from SQL Server Professional in SQL Server Professional magazine http://msdn.microsoft.com/library/default.asp?url=/l ibrary/en-us/dnsqlpro04/html/sp04j1.asp

ClearTrace
Written by SQL Server MVP - Bill Graziano Download from: http://www.cleardata.biz/cleartrace/downloa d.aspx

Replaying Traces
This can be very useful if you do not have the facilities to use a tool such as Visual Team Test or you only want to stress the database and not the GUI Use standard Replay Template Replay from file or table (but can not load file using fn_trace_gettable Can manipulate trace data in table and export it

Limitations of Replaying Traces


Not imitating users therefore stress is different to live system May not replay correctly (see considerations for replay in Books Online)

Visual Studio Team Suite


Unit and Load test Web applications Simulate multiple users Programmable to cater for runtime different etc

Microsoft Fiddler
Debugging Proxy Save as Visual Studio WebTest Download from www.fiddlertool.com

Resources
Profiling for Better Performance by Kimberly Tripp, MSDN webcast at http://msevents.microsoft.com/cui/webcasteventdetails.asp x?eventid=1032278616&eventcategory=5&culture=enus&countrycode=us MSDN Webcasts http://msdn.microsoft.com/webcasts Using Visual Studio 2005 to Perform Load Testing on a SQL Server 2005 Reporting Services Report Server http://msdn2.microsoft.com/en-us/library/aa964139.aspx Using SQL Server 2005 Profiler Brian Knight http://www.jumpstarttv.com/Media.aspx?vid=59 SQL Server Manageability Team Blog http://blogs.msdn.com/sqlrem/default.aspx

Resources
Troubleshooting Performance Problems in SQL Server 2005 document http://www.microsoft.com/prodtechnol/sql/2005/tsp rfprb.mspx Jasper Smith MVP - 1 Hour Trace http://www.sqldbatips.com/displaycode.asp?ID=7 Simon Sabines Taskpad Custom Report http://sqlblogcasts.com/blogs/simons/archive/2007 /03/28/Update-to-the-taskpad-custom-report.aspx Aaron Bertrands Show Blocking Custom Report http://sqlblog.com/blogs/aaron_bertrand/archive/2 006/12/19/448.aspx

Platinum

www.SQLBits.com
[Conference Web site]

www.sqlbits.com

Gold

www.SQLBlogCasts.com

www.SQLServerFAQ.com
Silver [UK SQL Server Community Website]

[Becoming the premier Blogging site for SQL professionals]

UK SQL Bloggers cwebbbi.spaces.live.com sqlblogcasts.com/blogs/simons sqlblogcasts.com/blogs/tonyrogerson

Feedback Forms!!

Das könnte Ihnen auch gefallen