Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2011, 09h08   #1
Membre régulier
 
Olivier Albertini
Inscription : avril 2006
Messages : 194
Détails du profil
Informations personnelles :
Nom : Olivier Albertini

Informations forums :
Inscription : avril 2006
Messages : 194
Points : 77
Points : 77
Par défaut Tester la performance d'un trigger sous SQL Server 2008

Bonjour,

J'ai trois façons de faire un Trigger l'un avec des curseurs l'autre avec une table temporaire, et un autre avec une énorme requête qui utilise les "union all" et "intersect"...
J'ai fait les trois et j'aimerais voir le gain ou la perte de performance pour chacun...

Je sais qu'il y a le "Activity Monitor" dans SQL Management studio mais je sais pas m'en servir ...

Le plus important serait de voir le temps d'exécution après s'il y a plus c'est que mieux !!!

Je spécifie que je connais déjà le résultat, soit l'énorme requête, la table temporaire et les curseurs dans l'ordre de rapidité, mais il me faudrait des preuves.

Merci de votre aide membre de développez !
lerieure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 09h55   #2
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 770
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 770
Points : 1 833
Points : 1 833
Un petit
Code :
1
2
3
SET statistics IO ON
....
SET statistics IO OFF
pour les information d'I/O
ou encore
Code :
1
2
3
SET statistics TIME ON
....
SET statistics TIME OFF
pour le temps CPU
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/02/2011, 14h14   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Bonjour,

Attention à ce que vous retourne SET STATISTICS TIME, car :
  • le temps d'exécution dépend ce qui se passe dans la base de données et / ou sur le serveur. Donc soyez certain que vous êtes seul à tester sur l'instance SQL Server
  • Exécutez la requête deux fois au moins puisque la première exécution comprendra la temps de compilation de la requête qui déclenche le trigger
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/02/2011, 14h41   #4
Membre régulier
 
Olivier Albertini
Inscription : avril 2006
Messages : 194
Détails du profil
Informations personnelles :
Nom : Olivier Albertini

Informations forums :
Inscription : avril 2006
Messages : 194
Points : 77
Points : 77
si je suis pas le seul sur l'instance ça expliquerait le fait que le résultat de mon message contient une centaine de
Code :
1
2
SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 2 ms.
Avec différentes valeurs...?

car j'ai fait un INSERT et je suis sur d'être le seul a utiliser la table...
Donc je comprends pas pourquoi j'aurais une centaine de message...
lerieure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 16h02   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Cela est dû aux diverses instructions qui composent l'instruction qui déclenche le trigger et a l'exécution du trigger lui-même.
Il y a je crois deux sorties par instruction ...

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/02/2011, 16h13   #6
Membre régulier
 
Olivier Albertini
Inscription : avril 2006
Messages : 194
Détails du profil
Informations personnelles :
Nom : Olivier Albertini

Informations forums :
Inscription : avril 2006
Messages : 194
Points : 77
Points : 77
Citation:
Cela est dû aux diverses instructions qui composent l'instruction qui déclenche le trigger et a l'exécution du trigger lui-même.
Il y a je crois deux sorties par instruction ...
Et c'est possible d'avoir la somme des temps des instructions qui composent l'instruction qui déclenche le trigger ?

ou il faut compter à la main xD
lerieure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 17h42   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Le mieux est pour cela d'utiliser le Profiler ou bien les statistiques du client.
Mais dans ce dernier cas, vous n'aurez que la durée totale d'exécution ...

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/02/2011, 17h50   #8
Membre régulier
 
Olivier Albertini
Inscription : avril 2006
Messages : 194
Détails du profil
Informations personnelles :
Nom : Olivier Albertini

Informations forums :
Inscription : avril 2006
Messages : 194
Points : 77
Points : 77
Citation:
Le mieux est pour cela d'utiliser le Profiler ou bien les statistiques du client.
Merci beaucoup je vais voir de ce coté alors connaissez vous un tuto sur l'utilisation du Profiler ?

(ps le lien ne marche pas pour moi "statistiques du client")
lerieure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 18h04   #9
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Désolé pour les statistiques du client, je viens de corriger le lien.

Pour le Profiler, j'ai créé un tutoriel sur les traces côté serveur.
Dans votre cas, vous n'avez besoin que d'une trace côté client, donc vous pouvez suivre le tutoriel jusqu'au paragraphe II inclus.

Après avoir décoché tous les événements précochés, cliquez sur le bouton "Show all events", puis dans la catégorie T-SQL, cochez la colonne TextData et duration (en microsecondes) de l'événement SQL:StmtCompleted.
Ajoutez également Reads et Writes pour avoir le nombre de pages lues et écrites par chaque requête.

Cliquez enfin sur le bouton "Run".

Exécutez maintenant vos requêtes : elle vont s'afficher dans le Profiler, avec leur caractéristiques d'exécution

Si vous exécutez une trace alors que vous êtes plusieurs à exécuter des requêtes sur la base de données ou que vous êtes en production, sélectionnez toujours le minimum de colonnes et d'événements, afin de minimiser la charge.
N'oubliez également jamais d'enregistrer dans un fichier (Cochez la case portant le même nom à la 2e capture d'écran de mon tutoriel )

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h24.


 
 
 
 
Partenaires

Hébergement Web