À l'aide de Sql Server 2005 Profiler, quels événements, colonnes et filtres tracez-vous pour trouver vos requêtes et procédures stockées les plus lentes?
Lent = supérieur à N secondes, 10 par souci d'argument.
Dans SQL 2005, vous pouvez utiliser des vues de gestion pour rechercher des requêtes à exécution lente. Un bon script que j'ai trouvé il y a quelque temps sur performances du serveur SQL vous aidera à démarrer; il répertorie les données les plus lentes en premier.
SELECT creation_time
,last_execution_time
,total_physical_reads
,total_logical_reads
,total_logical_writes
, execution_count
, total_worker_time
, total_elapsed_time
, total_elapsed_time / execution_count avg_elapsed_time
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;
Avant d'utiliser le profileur, je vérifie les rapports d'utilisation intégrés. Cliquez avec le bouton droit sur une base de données, Rapports, Rapports standard, puis Statistiques d'exécution d'objet.
Il répertorie les plans d'exécution actuellement mis en cache, ainsi que la quantité de ressources et le nombre d'exécutions. Cela donne généralement une très bonne idée de ce qui occupe le serveur.
La colonne de durée le fait pour moi, mais parfois je regarde aussi les colonnes de lecture et d'écriture.
J'utilise le filtre TSQL: StmtCompleted pour obtenir les requêtes brutes. Vous voudrez peut-être en ajouter d'autres, comme des procédures stockées, mais le tsql est la "base" que vous devez afficher. Comme le dit article MSDN
"L'exécution d'une procédure stockée peut être surveillée par les classes d'événements SP: Starting, SP: StmtStarting, SP: StmtCompleted et SP: Completed et toutes les classes d'événements TSQL."