66 votes

Comment puis-je me Connecter et de Trouver le Plus de Requêtes Cher?

Le moniteur d'activité dans sql2k8 nous permet de voir que la plupart des requêtes cher. Ok, c'est cool, mais il y a un moyen je peux me connecter cette info ou d'obtenir cette info via d'analyser la requête? Je n'ai pas vraiment envie d'avoir le Sql de la console de Gestion de l'ouvrir et de me regarder dans le moniteur d'activité tableau de bord.

Je veux comprendre les requêtes qui sont mal écrits et/schéma est mal conçu, etc.

Tas merci pour toute aide!

67voto

Mitch Wheat Points 169614
  1. Utilisation de SQL Server Profiler (dans le menu outils dans SSMS) pour créer une trace qui enregistre ces événements:
RPC:Completed
SP:Completed
SP:StmtCompleted
SQL:BatchCompleted
SQL:StmtCompleted


2. Vous pouvez commencer avec la norme du modèle de trace et de le tailler. Vous n'avez pas spécifié si c'est pour avoir une base de données spécifique ou l'ensemble du serveur, si c'est pour spécifique de la Db, inclure le DatabaseID colonne et de définir un filtre pour votre DB (SELECT DB_ID('dbname')). Assurez-vous que la logique Lit les données de la colonne est inclus pour chaque événement. La trace pour vous connecter à un fichier. Si vous quittez cette trace pour fonctionner sans surveillance dans le fond, c'est une bonne idée de fixer un maximum de trace de la taille du fichier de dire 500 mo ou 1 GO si vous avez beaucoup de place (tout dépend de la façon dont beaucoup d'activité, il y a sur le serveur, de sorte que vous avez à le sucer et voir).

  1. Brièvement démarrer la trace et ensuite de la mettre en pause. Goto Fichier->Exporter->Script de Définition de la Trace et choisir votre version DB, et l'enregistrer dans un fichier. Vous avez maintenant un script sql qui crée une trace qui a beaucoup moins de frais généraux que de courir à travers le profileur de l'interface graphique. Lorsque vous exécutez ce script, il sera de sortie de la Trace ID (habituellement @ID=2); à noter que cette baisse.

  2. Une fois que vous avez un fichier de trace (.trc) (soit la trace terminée à cause d'atteindre la taille maximale de fichier ou vous avez arrêté la trace d'exécution à l'aide de

    EXEC sp_trace_setstatus @ID, 0 EXEC sp_trace_setstatus @ID, 2

Vous pouvez charger la trace dans le profileur, ou de l'utilisation ClearTrace (très pratique) ou de le charger dans un tableau comme ceci:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

Ensuite, vous pouvez exécuter une requête afin d'agréger les données, tels que celui ci:

SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000))
 ,SUM(Duration) AS DurationTotal
 ,SUM(CPU) AS CPUTotal
 ,SUM(Reads) AS ReadsTotal
 ,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC

Une fois que vous avez identifié le coûteux requêtes, vous pouvez générer et de l'examen des plans d'exécution.

22voto

gngolakia Points 654

Le script Suivant vous donne le résultat.

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 

18voto

gbn Points 197263

Une réponse tardive...

L'utilisation de Dmv à trouver. Plus facile alors profiler...

4voto

Tom Lianza Points 1802

Je n'avais jamais entendu parler de cet outil avant, mais Microsoft propose un ensemble de rapports qui font un travail fantastique de vous donner exactement ce dont les requêtes les plus lentes. Découvrez leur tableau de bord de Performance des Rapports.

Vous ne savez pas si ils sont SQL 2008-compatibles, mais il vaut la peine de vérifier.

2voto

cfeduke Points 13153

Serait le générateur de profils SQL Server faire ce que vous avez besoin? Je n'ai pas utilisé de 2008 encore donc je ne sais pas si l'outil est toujours là, mais si c'est, je crois, vous pouvez configurer une trace de log de requêtes qui répondent à des critères spécifiques (tels que ceux qui exécutent et lecteur de PROCESSEUR jusqu'au-dessus d'un certain seuil).

Nous avons utilisé cette sur notre projet et il a fait un très bon travail pour nous aider à résoudre mal de l'exécution des requêtes (mais ne le laissez pas à temps plein, à compter sur le général Windows Compteurs de Performance pour la performance de suivi de la santé).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X