2010-10-27 2 views
5

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

3

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.

1

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.

2

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

Questions connexes