Most database performance issues are due to a combination of bad queries, bad database design or poor indexing. All of them are related to each other. In this session we will look at database performance from identification through to resolution.

This will include how to identify poor performance, how to dissect a query to understand what it should do and what indexes it should requires. Finally we resolve the performance problem by query rewriting, altering the database design, adding indexing and even not using the database.

During the session we will look at some of the common performance problems, like use of Common Table Expressions (CTEs), Temp tables and table variables, the OVER clause and parameter sniffing.

After this session you will understand
  • the different tools for diagnosing problems, the impact and benefit of using them as well as practical examples.
  • how queries are executed which enables you to rewrite queries effectively
  • Common query patterns and the options for rewriting them to get better performance
The agenda for the day is as follows

Identifying performance problems
  • Adhoc analysis, Trend analysis
  • Tools to use, DMVs, Profiler, Extended EventsClear Trace
  • Best practices
Diagnosing cause of performance
  • Looking at resource usage, IO, CPU and memory
  • Identifying contention locking/resource

Dissecting a query and its query plan
  • How to work out what a query should do
  • How tables are filtered using the “filter funnel process”
  • The importance of seek predicates and normal predicates
  • How are tables joined together, Hash, Merge and Loop joins
  • Impact of statistics and parameterisation
  • Understanding what indexes are needed for a query
Resolving performance
  • Query rewriting
    • Key areas that affect performance including
    • Predicates
    • Common table expressions
    • Table variables and temp tables
    • Functions
    • Aggregations
    • Parallelism
  • Database design
    • Normalisation
    • Common pitfalls
    • Partitioning should you or shouldn’t you
  • Indexing
    • How to determine the correct indexes,
    • Missing index DMVs
    • Impact of indexing
Presented by Simon Sabin at SQLBits XII