sql tuning dot.net perspective

35
SQL Tuning Dot.net Perspective 1 st Oct 2011 Bob Duffy Database/Solution Architect Prodata SQL Centre of Excellence

Upload: alaire

Post on 25-Feb-2016

57 views

Category:

Documents


9 download

DESCRIPTION

1 st Oct 2011. SQL Tuning Dot.net Perspective. Bob Duffy Database/Solution Architect Prodata SQL Centre of Excellence. Speaker Bio – Bob Duffy. Database/Solution Architect at Prodata SQL Centre of Excellence One of about 25 MCA for SQL Server globally (aka SQL Ranger) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SQL Tuning Dot.net Perspective

SQL Tuning Dot.net Perspective

1st Oct 2011

Bob DuffyDatabase/Solution ArchitectProdata SQL Centre of Excellence

Page 2: SQL Tuning Dot.net Perspective

Speaker Bio – Bob Duffy• Database/Solution Architect at Prodata SQL Centre of

Excellence• One of about 25 MCA for SQL Server globally (aka SQL

Ranger)• MCM on SQL 2005 and 2008• SQL Server MVP 2009+• 20 years in database sector, 250+ projects• Senior Consultant with Microsoft 2005-2008• Regular speaker for TechNet, MSDN, Users Groups, Irish and

UK Technology Conferences • *new* Completed the SSAS Maestro course

Page 3: SQL Tuning Dot.net Perspective

Session GoalsLearn to improve performance and scalability by making changes to your dot.net application.

Target Audience is developers who work with SQL OrDBA’s who work in the dot.net world

We will avoid typical SQL query tuning and physical tuning (covered elsewhere)

Page 4: SQL Tuning Dot.net Perspective

What is an Application ?Pure OLTPOLTP With Mixed Workload (CRM/ERP)

Departmental (< 200 users )Enterprise (> 250 users or strict performance SLA’s)

Logging/AuditingReportingBatch ProcessingData ProcessingWeb Scale OLTP

Page 5: SQL Tuning Dot.net Perspective

1. Connecting to SQL ServerConnection Pooling

Connection Authentication

Page 6: SQL Tuning Dot.net Perspective

Connection Pooling - OverviewConnections are slow and expensive

(3 * network_packet_size) + 94kShould be LESS connections than usersGeneral Guidance: Acquire late release earlyConnection String sets Pool Size

Default Min of 1 and Max of 100One Pool is created Per

Processper application domainper connection stringwhen using integrated security, per Windows identity.

Page 7: SQL Tuning Dot.net Perspective

Connection AuthenticationDecide on Trusted v DelegatedDecide on windows v sql authenticationIf Windows Decide on Kerberos v NTLM

To check Kerberos

Page 8: SQL Tuning Dot.net Perspective

Good or Bad Connections?

Page 9: SQL Tuning Dot.net Perspective

2. ParameterisationYou Must ParameterisationOptimising ParameterisationHow to Parameterise

Page 10: SQL Tuning Dot.net Perspective

Why you MUST ParameteriseBetter Performance and Security

PerformanceLess plans in the cacheLess compiles (should be close to zero)Opens the door to prepared statements

SecurityHelps prevent SQL injection

Page 11: SQL Tuning Dot.net Perspective

Parameter Tips and PitfallsAvoid using concatenation instead of proper paramsDo specify Length with variable length types

Otherwise will result in procedure cache bloat and more compilesOne plan per input data length

Should we use “.AddWithValue”?No – the data size is not specified

For optimal performance cache command objectWhen repeated calls to same statement

Use Prepared Statement (discussed later)Monitor for Parameter Sniffing Issues

Page 12: SQL Tuning Dot.net Perspective

How to ParameteriseInline SQL

Select * from Customers where CustomerID=@ID

Use Parameters Collection Cmd.Parameters.add(“@Id,variable,length)

Page 13: SQL Tuning Dot.net Perspective

Ad Hoc v Parameterised

Page 14: SQL Tuning Dot.net Perspective

Making the Most of a Bad DealWhat if your application is in production and has no parameterization (eg Siebel)

Update of Application Data Access is best but may not be possibleSimple queries may be “ok” due to auto parameterisation“Forced Parameterisation” database setting may helpServer setting “Optimise for Ad Hoc” is the second best option

Will solve proc cache bloatWill not resolve compile Issues (High CPU usage)

Check your Proc Cache for offending Queries

Look for single use queries and total size SELECT c.cacheobjtype , c.objtype , c.usecounts , c.size_in_bytes , t.dbid , t.text FROM sys.dm_exec_cached_plans as c CROSS APPLY sys.dm_exec_sql_text(plan_handle) as t WHERE c.cacheobjtype = 'Compiled Plan' ORDER BY c.usecounts DESC --ORDER BY t.text

Page 15: SQL Tuning Dot.net Perspective

3. SqlCommand TipsParameterize those queries

Last Section

Use RPC CallsUse CommandType=StoredProcedureDo NOT “stuff” statements (causes compiles)

Cache where frequently calledCareful of overzealous “stateless” architectureConsider Preparation for batches of similar commands

Make good use of methods with no resultsets

ExecuteNonQueryExecuteScalar

Page 16: SQL Tuning Dot.net Perspective

4. Prepared CommandsChatty Interfaces may send same request with different parameters.

Waste of bandwidth and other resourcesUse sqlCommand.Prepare to optimise this

Sends the SQL only once over networkCalls sp_prepexec in SQL ServerCalls sp_execute with each set of parameters

Greater startup cost, so avoid with only single calls

Page 17: SQL Tuning Dot.net Perspective

5. The Chunky v Chatty DebateWe consider two types of chunkiness

Data transferred. One row or one tableOne call per statement or one per batch

Affects type of dot.net callsGetAllCustomers()GetCustomer(CustomerID as int)

Affects guidance on ado.netUse of Stored Proceduresuse of TransactionsUse of Data Caching

Page 18: SQL Tuning Dot.net Perspective

Some Test ResultsTest Name

(Seconds)

AdHoc SQL 126.03Connection Pooling 75.56Parameterized 21.55Connection Pooling 19.16Cached Connection 18.04Prepared 15.33DataReader 13.67Chunky 7.43

Page 19: SQL Tuning Dot.net Perspective

6. Optimising ResultsetsData Readers v Data TablesOrdinal Indexes

Page 20: SQL Tuning Dot.net Perspective

SqlDataReader - OverviewStreaming access row by row basis

Data is buffered in the backgroundConnected while reading

Avoid passing aroundAvoid delaying reader or you will see ASYNC_NETWORK_IO

Very fast but inflexible

Page 21: SQL Tuning Dot.net Perspective

SqlDataReader - BatchingAvoid making multiple round trips when you can make oneIf you need two distinct sets of data, send both requests in a single batchUse SqlDataReader.NextResult to move to the next tableThis is forward only

Warning – while this will improve performance we do find it affects maintainability if not used with good helper functions.

Page 22: SQL Tuning Dot.net Perspective

DataTable - OverviewCached, in-memory access to all of the rows

Everything is pulled across the wire BEFORE reading starts

DataAdapter Fills the DataTableUses a reader behind the scenesSo double pass over data to read it !!

Disconnected AccessCan be cached and passed around

Supports limited searching and sorting

Bottom Line: Ultimate flexibility, with some performance sacrificed

Page 23: SQL Tuning Dot.net Perspective

What are Ordinal IndexesBoth Reader and table offer column name or Ordinal Indexes

Column Names calls GetOrdinal under the covers

RecommendationsAlign enumerations with the output column listCall GetOrdinal in advance and store the ordinal positions to avoid multiple calls

C#int productIdOrdinal = reader.GetOrdinal(“productId”);while (reader.read()) productIds.Add((int)reader[productIdOrdinal]);

Page 24: SQL Tuning Dot.net Perspective

Some Test Results

Page 25: SQL Tuning Dot.net Perspective

7. SqlBulkCopy Overview.NET class that exposes the functionality of SQL Server’s Bulk Copy API

Sends rows to SQL Server using TDS

Enables minimally-logged inserts

Accepts data input via either DataTable or IDataReader

Page 26: SQL Tuning Dot.net Perspective

Requirements for Minimal LoggingTable not replicated

TABLOCKTable is a heapIf table has clustered Index

Pages fully logged unless table empty

Trace Flag 610 allows for Minimal logging on non empty tables with clustered Indexes

Page 27: SQL Tuning Dot.net Perspective

8. Table Valued ParametersTable-Valued Parameters are a SQL Server 2008 feature, available from ADO.NET 3.5

Allows creation of typed table parameters to stored procedures

Table types support CHECK, DEFAULT, PRIMARY KEY, and UNIQUE constraints

Input only; must specify READONLY option in stored procedure parameter

Page 28: SQL Tuning Dot.net Perspective

Some Test Results – 1 million row insert

Test SecsRow by Row (Prepared) 245.47SqlBulkCopy - Minimal Logged 2.4TVP 6.2SqlBulkCopy - Fully Logged 4.5

Page 29: SQL Tuning Dot.net Perspective

9. Data Caching ConsiderationsProper use of caching can be the key to application scalability.

Consider:Should cache granularity be user-level or application-level?Should the cache live on the server or at the client?How should cache expiration and update be handled?What form of data or objects should be cached?How do we distribute cache across servers ?Do we cache reads/writes or both?

Page 30: SQL Tuning Dot.net Perspective

10. Some ORM GuidanceCheck the Health of the Plan Cache

Queries Provided Earlier

Log and monitor the SQL being generatedRML OR DMV’s are good here

If a query is not getting optimized properly, consider migrating to a stored procedure

Page 31: SQL Tuning Dot.net Perspective

Coming up…

#SQLBITS

Speaker Title Room

Quest Trivia Quiz: Test Your SQL Server and IT Knowledge and Win Prizes Aintree

SQL Server Community SQL Server Community presents : The A to Z of SQL Nuggets Lancaster

SQLSentry Real Time and Historical Performance Troubleshooting with SQL Sentry Pearce

Attunity Data Replication Redefined – best practices for replicating data to SQL Server Empire

Page 32: SQL Tuning Dot.net Perspective

11 Stored Proc or T-SQL not optimalToo much IO on query plan

Too many joinsLack of covering indexesNon SARGABLE predicatesUse of UDF’s

Too much data in columns or rowData Model Design not optimal (de-normalised)Abuse of Temp variablesProcedural or math heavy code in stored procsAbuse of DISTINCT

In conjunction with UDF or non sargableAbuse of UNIONUse of TriggersImplicit Conversions

Page 33: SQL Tuning Dot.net Perspective

ResourcesSQL Server Connection Poolinghttp://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

SET OPTIONS That Affect Resultshttp://msdn.microsoft.com/en-us/library/ms175088.aspx

How to use Impersonation and Delegationhttp://msdn.microsoft.com/en-us/library/ff647404.aspx

Beginners Guide to ADO.Net Entity Frameworkhttp://msdn.microsoft.com/en-us/data/aa937723

Page 34: SQL Tuning Dot.net Perspective

Query NotificationHow does it work?

Page 35: SQL Tuning Dot.net Perspective

Thank You