Amit Bansal is a CTO who has conducted over 200 workshops on SQL Server and BI technologies. The presentation discusses SQL Server query optimizer characteristics and how plan guides can be used to manage query plans. Plan guides allow forcing or locking down a query plan to provide performance stability. Different types of plan guides include object, SQL, and template plan guides. The presentation covers creating, implementing, and managing plan guides.
3. Who is Amit Bansal?
CTO, eDominer Systems & Peopleware India
Conducted more than 200 workshops on SQL Server &
BI for top notch IT companies world wide
Microsoft MVP for SQL Server
Microsoft Certified Trainer Advisory Council member
Speaker at TechED India, TechED US & TechED Europe
Technical Reviewer – MSL courses on SQL Server
SME – SQL Server 2008 certifications
UG Lead (Delhi NCR) – Culminis
Manager – www.WeTogether.in, www.DelhiDevs.com,
www.BlogBoard.in
4. Agenda & Session takeaways
Query Optimizer characteristics
Using Query & Table Hints
Plan Freezing concept
Scenarios from the wild
What are Plan Guides & different types
Implementing Plan Guides
Managing & Validating Plan Guides
Plan Guide considerations
Summary
5. Query Optimizer characteristics
Cost based optimization
Does the Query Optimizer always do a fine job?
Does it always select the best query plan?
Use Hints to affect the query plan selection
Use Hints as a last resort, Use with caution
To be used only by experienced DBDs & DBAs
Is there really a problem?
Check if there are other issues
Identify the real cause of a poor plan
What if SQL Server fails to generate a valid plan?
(error 8622 is raised)
6. Join, Query & Table Hints
FAST N Hint Functionality
RECOMPILE
Index Hints
OPTIMIZE FOR Hint
OPTIMIZE FOR UNKNOWN Hint Join Hints
JOIN Hints Parallelism
FORCE ORDER Hint Locking
INDEX Hint
Compilation
FORCESEEK Hint
READPAST Hint Table Hints
USE PLAN Hint ….
7. Plan Freezing concepts
Forcing / Locking down a query plan
Provides greater query performance stability &
predictability
Enables organizations to promote stable query plans
Hardware Server replacements
Server upgrades
Production Deployments
Plan Freezing can
Optimize query performance
Copy query plans between servers
Prevent the plan cache from growing excessively with large
compiled plans that are not reused
8. Scenarios from the wild…
A query started mis-behaving after SQL Server upgrade
Query text cannot be modified to use hints
Eg: Application/vendor code, ISV, etc
Query performance degraded after hardware upgrade
You need to copy plans from one server to the other
Overcoming ‘Parameter Sniffing’ issues
After a service pack upgrade – “my query just starting
running 4 times slower today and the plan is different
from yesterday” ……sigh
9. What are Plan Guides?
Plan Freezing concept is implemented with Plan Guides
A DB object that associates a set of query hints with
the query
Can be created using:
sp_create_plan_guide
sp_create_plan_guide_from_handle
Fixed query plan (XML Showplan output) can be also
be applied
Available in Standard, Enterprise, Evaluation &
Developer edition
10. Types of Plan Guides
Object Plan Guides
matches queries that execute in the context of a SQL Server
object (SP, UDF, DML triggers etc)
SQL Plan Guides
matches queries that execute in the context of stand-alone
Transact-SQL statements and batches ( not part of a
database object)
Template Plan Guides
matches stand-alone queries that parameterize to a
specified form
To override the current PARAMETERIZATION setting
11. Object Plan Guides
You are interested in a T-SQL statement appearing in
the context of a SQL Server object
SQL Server object can be:
Stored Procedure
User Defined Function (Scalar)
Multi-statement table-valued user-defined
functions
DML Triggers
12. Object Plan Guides
sp_create_plan_guide
@name = N'Guide1',
@stmt = N'SELECT *FROM Sales.SalesOrderHeader AS
h,
Sales.Customer AS c,
Sales.SalesTerritory AS t
WHERE h.CustomerID = c.CustomerID
AND c.TerritoryID = t.TerritoryID
AND CountryRegionCode =
@Country_region',
@type = N'OBJECT',
@module_or_batch =
N'Sales.GetSalesOrderByCountry',
@params = NULL,
@hints = N'OPTION (OPTIMIZE FOR (@Country_region
= N''US''))'
14. SQL Plan Guides
You are interested in a particular T-SQL statement
Stand-alone
Or part of a batch
T-SQL statements sent by CLR objects, extended SPs &
Dynamic SQL (EXEC (sql_string)) are processed as
batches
The text has to be exactly the same:
Case, whitespace, etc.
15. SQL Plan Guides
sp_create_plan_guide
@name = N'Guide2',
@stmt = N'SELECT TOP 1 * FROM
Sales.SalesOrderHeader ORDER BY OrderDate DESC',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (MAXDOP 1)';
17. Template Plan Guides
To override PARAMETERIZATION database setting
Can only use the following hints:
PARAMETERIZATION FORCED
PARAMETERIZATION SIMPLE
Little tricky
SQL Server has to construct a template of the query
in the same format that it will be in once it is
parameterized
Special stored procedure: sp_get_query_template
@params is only used for TEMPLATE plan guide
18. Template Plan Guides
EXEC sp_create_plan_guide
@name = N'TemplateGuide1',
@stmt = N'SELECT * FROM
AdventureWorks.Sales.SalesOrderHeader AS h
INNER JOIN
AdventureWorks.Sales.SalesOrderDetail AS d
ON h.SalesOrderID =
d.SalesOrderID
WHERE h.SalesOrderID = @0',
@type = N'TEMPLATE',
@module_or_batch = NULL,
@params = N'@0 int',
@hints = N'OPTION(PARAMETERIZATION FORCED)';
20. Applying a Fixed Query Plan to a Plan
Guide
Useful when you know about an existing
execution plan that performs better than the
one selected by the optimizer for a particular
query
Can be applied to OBJECT or SQL plan guides
Extract the XML Showplan from the cache and
supply it to the sp_create_plan_guide
22. Creating Plan Guides directly from
the plan cache
Creates one or more plan guides from a query
plan in the plan cache
Can be applied to OBJECT or SQL plan guides
Extract the plan handle from the cache and
supply it to the
sp_create_plan_guide_from_handle
24. Managing & Validating Plan Guides
Managing Plan Guides
sp_control_plan_guide
ENABLE, DISABLE, DROP
Validating Plan guides
sys.fn_validate_plan_guide
25. Plan Guides considerations
The statement text in the plan guide must exactly
match the query text
To verify that your plan guide was used, see for specific
elements in XML Showplan output
PlanGuideDB & PlanGuideName (or)
TemplatePlanGuideDB & TemplatePlanGuideName
Query Plan (properties window)
26. Summary
There are many scenarios where you cannot use hints
Plan Guides come to rescue
Three different types (OBJECT, SQL, TEMPLATE)
SQL Server 2008 enhancements
Applying a fixed query to a plan guide using XML
Showplan
Creating a plan directly from a plan in the plan
cache
Validating Plan Guides
Plan Guide Considerations