21
goo.gl/9AjiC Comment utiliser le plan d’exécution pour améliorer la performance des requêtes 2013 Communauté .NET de Montréal

Comment utiliser le plan execution le plan execution

Embed Size (px)

Citation preview

Page 1: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Comment utiliser le plan d’exécution pour améliorer la

performance des requêtes

2013

Communauté .NET de Montréal

Page 3: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Mise en situation typique

Démo

Page 4: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Mise en situation idéale

Analyse fonctionnelle

Développement

Révision du code

Révision de performance

Test unitaire

Tests acceptation

Déploiement

Page 5: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Révision de performance de code ???

• Compiler les statistiques de performance

• Snapshot de l'état du système (Schéma, taille des tables, …)

• Recommandations de l'Architecte, DBA et du DEV

• Scénarios testés et rejetés

Page 6: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Métriques

• Temps

• IO reads, writes

• CPU

• Coût = fn(CPU, IO)

• Coût = fn(CPU, IO) sauf si UDF ou CLR

Page 7: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Le plan d’exécution se trouve…

• 3 types de plan d'exécution• Texte

• Graphique

• XML

• Comment extraire le plan1. SSMS

2. DMV

3. Profiler

Démo

Page 8: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Quoi chercher dans le plan d'execution ?

• Opérateurs coûteux

• Opérateurs SCAN

• Opérateurs HASH

• Lignes épaisses

• ORDER BY

• Large plan

Page 9: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

L'exécution d'une requête

1. Parsing

2. Algebrizer

3. Relational Engine

4. Storage Engine

Page 10: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Opérateurs

Autres opérateurs

Page 11: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Search Arguments

• Filtre dans la clause WHERE qui permet d'utiliser un index

LEFT(LastName, 1) = 'A'vsLastName like 'A%'

YEAR(OrderDate) = 2004vsOrderDate between '2004-01-01' and '2004-12-31'

Démo

Page 12: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Les indexes

• Clustérisé = Dictionnaire

• Non-clustérisé = index de livre

• Covering = Tous se trouve dans l’index

• Filtered = Index partiel

• Indexed View = Vue matérialisée

• Full Text Catalog = Recherche de mots

• XML

Page 13: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Index clustérisé & non-clustérisé

• Index clustérisé est utilisé dans les indexes non-clustérisé.

• L'ordre des colonnes est important.

• Les champs INCLUDE ne sont pas triés.

create table table1(col1 int primary key,col2 varchar(20),col3 int);

-- Cet indexcreate index idx1 on table1(col2)-- Sera le même que...create index idx2 on table1(col2, col1)

Page 14: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Pourquoi un index n’est pas utilisé ?

• Les statistiques

• La sélectivité

• La densité

• La cardinalité

• Histogramme

Un index n'est pas utilisé si la sélectivité de la colonne filtrée n'est pas assez élevé.

Démo

Page 15: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Hints

• Query hints• MAXDOP• OPTIMIZE FOR• RECOMPILE• KEEP PLAN

• Join hints• LOOP• MERGE

• Table hints• INDEX• FORCESEEK

Démo

Page 16: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Theoretical Query Execution Order

TQEO excluding UNION

1. FROM, JOIN, APPLY et ON

2. WHERE

3. GROUP BY

4. HAVING

5. SELECT

6. ORDER BY

7. TOP

8. FOR XML

TQEO including UNION

1. FROM, JOIN, APPLY et ON

2. WHERE

3. GROUP BY

4. HAVING

5. TOP

6. UNION et SELECT

7. ORDER BY

8. FOR XML

Page 17: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Autres pistes d'optimisation

• Nouveau code (MERGE, CROSS APPLY, etc)

• Schéma (tables, vues) et "Dénormalisation"

• Tri des données par le client

• Utiliser la cache du côté client

• Parallélisme MAXDOP

• Éviter les curseurs

• Vérifier si le plan est réutilisé avec Profiler SP:Cache Hit

• Partition (Entreprise)

• Compression (Entreprise)

Page 18: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

DMV

• Trouver les indexes non utilisés ou en double

Page 19: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Conclusion

• Prendre le temps de comparer (tester) plusieurs scénarios.

• Utiliser les nouvelles commandes.

• Suivre les recommandations & retirer ensuite les indexes non-utilisés ou en double (avec les DMV).

• Developpez un questionnaire pour vous permettre de réviser la performance du code.

• N'attendez pas après le DBA ou le DEV pour évaluer la performance.

Page 20: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Bibliographie

Thernstrom, Tobias. Weber, Ann. Hotek, Mike. (2009). MCTS Self-PacedTraining Kit (Exam 70-433) SQL Server 2008-Database Development. Redmond, USA. 484 p.

Fritchey, Grant. (2012). SQL Server Execution Plans Second Edition, Simple Talk Publishing, USA, 321 p. Link

Nevarez, Benjamin. (2010). Inside the SQL Server Query Optimizer, Simple Talk Publishing, USA, 258 p.Link

Page 21: Comment utiliser le plan execution le plan execution

goo.gl/9AjiC

Questions

• La présentation et les exemples seront disponible sur www.dotnetmontreal.com

• Résultat du sondage goo.gl/R3OHI

• Vous pouvez me rejoindre [email protected]