Question

Comment procéder pour profiler quelques requêtes exécutées à partir d’une application ASP.NET? Je travaille avec un logiciel extrêmement lent en raison de la base de données (je pense). Les tables ont des index, mais ça traîne quand même parce que ça fonctionne avec tellement de données. Comment puis-je profiler pour voir où je peux apporter quelques améliorations mineures qui, espérons-le, mèneront à de plus grandes améliorations de la vitesse?

Éditer: j'aimerais ajouter que le serveur Web aime le délai d'expiration pendant ces longues requêtes.

Était-ce utile?

La solution

Sql Server dispose d'excellents outils pour vous aider dans cette situation. Ces outils sont intégrés à Management Studio (auparavant appelé Enterprise Manager + Query Analyzer).

Utilisez SQL Profiler pour vous montrer les requêtes provenant de l'application Web.

Copiez chacune des requêtes posant problème (celles qui consomment beaucoup de temps processeur ou IO). Exécutez les requêtes avec l'option "Afficher le plan d'exécution réel". J'espère que vous verrez un indice évident qui manque.

Vous pouvez également exécuter l'assistant de réglage (le bouton se trouve juste à côté de "afficher le plan d'exécution réel". Il lancera la requête et formulera des suggestions.

Habituellement, si vous avez déjà des index et que les requêtes fonctionnent toujours lentement, vous devrez réécrire les requêtes d'une manière différente.

Le fait de conserver toutes vos requêtes dans les procédures stockées rend ce travail beaucoup plus facile.

Autres conseils

Pour profiler SQL Server, utilisez le Générateur de profils SQL .

Et vous pouvez utiliser ANTS Profiler de Red Gate au profil votre code.

Un autre profileur .NET qui fonctionne bien avec ASP.NET est dotTrace . Je l'ai personnellement utilisé et j'ai trouvé beaucoup de goulots d'étranglement dans mon code.

Je pense que vous avez la réponse dont vous avez besoin pour profiler les requêtes. Cependant, c'est la partie la plus facile du réglage des performances. Une fois que vous savez que ce sont les requêtes et non le réseau ou l'application, comment trouvez-vous et résolvez-vous le problème?

Le réglage des performances est une chose complexe. Mais il y a des endroits à regarder en premier. Vous dites que vous retournez beaucoup de données? Renvoyez-vous plus de données que nécessaire? Rendez-vous réellement uniquement les colonnes et les enregistrements dont vous avez besoin? Renvoyer 100 colonnes à l'aide de select * peut être beaucoup plus lent que de renvoyer les 5 colonnes que vous utilisez réellement.

Vos index et statistiques sont-ils à jour? Recherchez comment mettre à jour les statistiques et réindexer dans BOL si vous ne l'avez pas fait depuis un moment. Avez-vous des index sur tous les champs de jointure? Qu'en est-il des champs de la clause where?

Avez-vous utilisé un curseur? Avez-vous utilisé des sous-requêtes? Qu'en est-il de l'union - si vous l'utilisez, peut-il être changé en union pour tous?

Vos questions sont-elles claires (google si le terme ne vous est pas familier?)

Utilisez-vous distinct quand vous pouvez utiliser groupe par?

Avez-vous des verrous?

Il y a beaucoup d'autres choses à regarder qui ne sont qu'un point de départ.

S'il y a une requête particulière ou une procédure stockée que je souhaite ajuster, j'ai trouvé qu'il était très utile d'activer les statistiques avant la requête:

SET STATISTICS TIME ON
SET STATISTICS IO ON

Lorsque vous activez les statistiques dans l'Analyseur de requêtes, celles-ci sont affichées dans l'onglet Messages du volet Résultats.

Les statistiques d'E / S m'ont été particulièrement utiles car elles me permettent de savoir si un index est nécessaire. Si je vois un nombre élevé de lectures dans les statistiques d'E / S, je pourrais essayer d'ajouter différents index aux tables affectées. Lorsque j'essaie un index, je relance la requête pour voir si le nombre de lectures a diminué. Après quelques itérations, je peux généralement trouver le (s) meilleur (s) index pour les tables impliquées.

Voici des liens vers MSDN pour ces commandes de statistiques:

RÉGLER L'HEURE DES STATISTIQUES

SET STATISTICS IO

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top