Microsoft SQL Server/Performances

Optimisation de requêtes

modifier

Les hints ou indicateurs permettent d'optimiser les transactions pour arriver au même résultat plus rapidement avec moins de ressources.

Pour comparer ceux-ci, il suffit de lancer dans le menu Requête, Afficher le plan d'exécution estimé.

Lors d'une exécution via SQL Studio, le bouton "include le plan d'exécution réel" permet de voir si l'ordre des opérations est le plus judicieux (généralement on procède par projection, puis sélection et jointure). Ce plan peut être enregistré en XML, au format .sqlplan.

Les hints sont stipulés à la fin de la requête, avec les clauses WITH ou OPTION entre parenthèses[1].

Plan d'exécution

modifier

Le plan d'exécution d'une requête peut s'affiche sous son résultat en l'activant ainsi :

SET STATISTICS PROFILE ON

Il existe plusieurs types d'indexation des tables sur MSSQL[2] :

  • index unique : index appliqué sur une clé candidate. On le crée avec la clause CREATE UNIQUE INDEX ;
  • index non-cluster : index par défaut si aucun n'est précisé (CREATE INDEX = CREATE NONCLUSTERED INDEX) ;
  • index cluster : particularité de Microsoft SQL Server[3] qui stocke les données dans les feuilles de l'arbre. L'ordre physique correspond donc à l'ordre logique des enregistrements ;
  • index XML primaire : pour les balises XML ;
  • index spatial : pour les bases de données spatiales ;
  • index columnstore.

Pour savoir quel sont les index d'une table :

sp_helpindex  table1

Création

modifier

Par convention on nommera les index avec un préfixe "IX_" :

CREATE INDEX IX_Date   
ON MaBase.table1(Champ_Date);

Pour le type de données XML, il existe aussi CREATE XML SCHEMA COLLECTION[4].

Utilisation

modifier

Pour permettre à l'optimiseur de requêtes un élagage rapide des enregistrements à ne pas parcourir lors d'une sélection, il faut utiliser le ou les index les plus appropriés par rapport aux conditions (WHERE) :

SELECT *
FROM table1 WITH (INDEX(IX_Date))
WHERE Champ_Date between '20150101' and '20150131'

Suppression

modifier
DROP INDEX MaBase.table1.IX_Date

Group by

modifier

GROUP BY avec ROLLUP, CUBE et GROUPING SETS[5].

Réplication

modifier

Pour répliquer une base de données sur un autre serveur, il faut configurer une mise en miroir sur au moins trois serveurs : le principal, le miroir, et le témoin pour les contrôler. Il est déconseillé d'héberger l'instance du témoin sur les mêmes machines que les deux premiers[6]. Toutefois si cela arrive, il faudra lui spécifier un port différent de celui par défaut (5022).

Partitionnement

modifier

CREATE PARTITION SCHEME[7].

Haute disponibilité

modifier

Prévoir un audit trimestriel pour déterminer les requêtes les plus consommatrices[8].

Références

modifier
  1. http://msdn.microsoft.com/fr-fr/library/ms187713%28v=sql.100%29.aspx
  2. https://msdn.microsoft.com/fr-fr/library/ms188783.aspx
  3. https://msdn.microsoft.com/fr-fr/library/ms190457.aspx
  4. https://msdn.microsoft.com/en-us/library/ms176009.aspx
  5. https://technet.microsoft.com/fr-fr/library/bb522495%28v=sql.105%29.aspx
  6. https://technet.microsoft.com/fr-fr/library/ms175191(v=sql.105).aspx
  7. https://msdn.microsoft.com/en-us/library/bb934097.aspx
  8. http://www.dbta.com/Editorial/Trends-and-Applications/Essential-Tips-on-SQL-Server-Database-Performance-108768.aspx