Donc, j'ai déjà utilisé SQL Profiler et je sais comment je peux voir ce que mes requêtes LINQ font dans les coulisses. Nous sommes en train d'identifier les requêtes qui peuvent prendre plus de temps et doivent être optimisées ou indexées. Donc, maintenant que je vois mes requêtes LINQ dans le profileur qui l'exécute côte à côte, il y a beaucoup d'autres données et requêtes dont je ne me soucie pas. Y a-t-il de toute façon le profileur ou d'autres outils capables de trier les requêtes dans l'ordre du plus grand nombre ... pour que je travaille à l'optimiser. Je veux lancer mon application et voir ensuite dans le profiler les pires requêtes du lot. Quelqu'un peut-il me guider ou me diriger vers quelque chose qui est plus utile en essayant de faire du profilage avec sql server 2005. De plus, toutes les idées ou suggestions ou les meilleures façons d'aborder le profilage sont les bienvenues. Merci.SQL Server Profil comment dois-je faire?
Répondre
Voici une requête sur un DMV qui listera les requêtes avec quelques détails sur le temps CPU. Une fois que vous avez identifié la requête, lancez-la avec Include Actual Execution Plan
pour voir le flux de la requête et où vous pourriez avoir besoin d'être indexé.
select
highest_cpu_queries.plan_handle,
highest_cpu_queries.total_worker_time,
q.[text]
from
(select top 50
qs.plan_handle,
qs.total_worker_time
from
sys.dm_exec_query_stats qs
order by qs.total_worker_time desc) as highest_cpu_queries
cross apply sys.dm_exec_sql_text(plan_handle) as q
order by highest_cpu_queries.total_worker_time desc
Voici une bonne article sur la recherche de problèmes de performance.
Vous pouvez commencer par modifier les propriétés de trace lorsque vous démarrez le profileur. Sélectionnez l'onglet Sélection des événements et cliquez sur le bouton Filtres de colonne. Dans la boîte de dialogue Modifier le filtre, sélectionnez Durée. Puis cliquez sur Supérieur ou égal et entrez une valeur. La valeur est en millisecondes. Par conséquent, si vous souhaitez afficher des requêtes d'une durée supérieure à 5 secondes, entrez 5000.
Vous pouvez également consulter d'autres filtres et configurer la valeur de durée si nécessaire.
pour une liste « un sale rapide » des pires requêtes, vous pouvez simplement utiliser quelque chose comme ceci:
SELECT TOP 10
total_worker_time/execution_count AS Avg_CPU_Time
,execution_count
,total_elapsed_time/execution_count as AVG_Run_Time
,(SELECT
SUBSTRING(text,statement_start_offset/2,(CASE
WHEN statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), text)) * 2
ELSE statement_end_offset
END -statement_start_offset)/2
) FROM sys.dm_exec_sql_text(sql_handle)
) AS query_text
FROM sys.dm_exec_query_stats
ORDER BY 3 DESC
voir: http://msdn.microsoft.com/en-us/library/ms189741%28SQL.90%29.aspx