Microsoft SQL Server/Performances
Optimisation de requêtes
modifierLes 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
modifierLe plan d'exécution d'une requête peut s'affiche sous son résultat en l'activant ainsi :
SET STATISTICS PROFILE ON
Index
modifierIl 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
modifierPar 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
modifierPour 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
modifierDROP INDEX MaBase.table1.IX_Date
Group by
modifierGROUP BY avec ROLLUP, CUBE et GROUPING SETS[5].
Réplication
modifierPour 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
modifierCREATE PARTITION SCHEME[7].
Haute disponibilité
modifierAudits
modifierPrévoir un audit trimestriel pour déterminer les requêtes les plus consommatrices[8].
Références
modifier- ↑ http://msdn.microsoft.com/fr-fr/library/ms187713%28v=sql.100%29.aspx
- ↑ https://msdn.microsoft.com/fr-fr/library/ms188783.aspx
- ↑ https://msdn.microsoft.com/fr-fr/library/ms190457.aspx
- ↑ https://msdn.microsoft.com/en-us/library/ms176009.aspx
- ↑ https://technet.microsoft.com/fr-fr/library/bb522495%28v=sql.105%29.aspx
- ↑ https://technet.microsoft.com/fr-fr/library/ms175191(v=sql.105).aspx
- ↑ https://msdn.microsoft.com/en-us/library/bb934097.aspx
- ↑ http://www.dbta.com/Editorial/Trends-and-Applications/Essential-Tips-on-SQL-Server-Database-Performance-108768.aspx