J'ai posé cette question before. Mais voici ce que je voudrais faire - Je voudrais lancer mon application .net et surveiller les requêtes sql en cours de réalisation et ne surveiller que celles par rapport à sql profiler qui enregistre tout. Donc, est-ce que quelqu'un connaît un outil ou une façon dont je peux surveiller les requêtes pour une application et ensuite trouver les requêtes les plus chères de cette session?Existe-t-il un moyen de trouver les requêtes les plus chères au cours d'une période donnée?
Répondre
Dans votre chaîne de connexion d'applications à SQL Server, ajoutez (OTTOMH) APPLICATION_NAME = 'ABC App'. Donc, en effet, il devrait être comme
'Serveur = YourServerName; Integrated Security = SSPI; Application_Name = ABC App'
Une fois que votre application est en cours d'exécution, vous pouvez exécuter sp_who2
dans SQL Server Management Studio pour afficher toutes les connexions - Vérifiez là pour vous assurer que votre application apparaît avec le nom plutôt que le nom générique pour les applications .Net.
* Vérifiez bien si cela est App Nom ou Application_Name *
Lorsque vous configurez les indicateurs de suivi dans Profiler, allez dans l'onglet Événements, puis cliquez sur Filtres de colonne. Le premier est pour le nom d'application. Réglez ce paramètre sur '% ABC App%'
Utilisez une trace SQL côté serveur (pas l'interface graphique du profileur car cela ajoute plus de frais généraux), filtrez les spid (s) utilisés par votre application, utilisez RML utilities pour traiter et agréger les données de trace.
Les utilitaires RML prendront soin de modéliser des requêtes similaires avec différentes valeurs de colonne de texte (par exemple des appels aux mêmes procédures stockées avec différentes valeurs de paramètres) afin qu'elles soient agrégées ensemble.
SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC