Question

Nous rencontrons des délais d'expiration de requêtes aléatoires et sporadiques sur notre cluster SQL Server 2005.Je possède quelques applications qui l'utilisent, je participe donc à l'enquête.Lorsque vous regardez le% de temps CPU dans le vieux Perfmon classique, vous pouvez certainement le voir se refléter.Cependant, le moniteur d'activité SQL ne donne que le temps cumulé d'UC et d'E/S utilisé par un processus, et non ce qu'il utilise à ce moment-là ou sur une période de temps spécifique.Je pourrais peut-être utiliser le profileur et exécuter une trace, mais ce cluster est très utilisé et j'ai peur de chercher une aiguille dans une botte de foin.Est-ce que je me trompe d'arbre ?

Quelqu'un a-t-il de bonnes méthodes pour traquer les requêtes/processus coûteux dans cet environnement ?

Était-ce utile?

La solution

Cela vous donnera les 50 premières instructions par temps CPU moyen, vérifiez ici les autres scripts : http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true

SELECT TOP 50
        qs.total_worker_time/qs.execution_count as [Avg CPU Time],
        SUBSTRING(qt.text,qs.statement_start_offset/2, 
            (case when qs.statement_end_offset = -1 
            then len(convert(nvarchar(max), qt.text)) * 2 
            else qs.statement_end_offset end -qs.statement_start_offset)/2) 
        as query_text,
        qt.dbid, dbname=db_name(qt.dbid),
        qt.objectid 
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY 
        [Avg CPU Time] DESC

Autres conseils

j'ai trouvé le Rapports du tableau de bord des performances être très utile.Il s'agit d'un ensemble de rapports RS personnalisés fournis par Microsoft.Il vous suffit d'exécuter le programme d'installation sur votre PC client, puis d'exécuter setup.sql sur l'instance SQL Server.

Après cela, faites un clic droit sur une base de données (peu importe laquelle) dans SSMS et accédez à Rapports -> Rapports personnalisés.Accédez au fichier performance_dashboard_main.rdl et sélectionnez-le qui se trouve par défaut dans le dossier \Program Files\Microsoft SQL Server\90 ools\PerformanceDashboard.Vous ne devez le faire qu'une seule fois.Après la première fois, il apparaîtra dans la liste des rapports.

La vue principale du tableau de bord affichera, entre autres, l'utilisation du processeur au fil du temps.Vous pouvez le rafraîchir de temps en temps.Lorsque vous voyez un pic, cliquez simplement sur la barre du graphique pour obtenir les données détaillées qui se cachent derrière.

Nous utilisons Quest Projecteur produit.Évidemment, c'est un investissement en temps et en argent, donc cela pourrait ne pas vous aider à court terme, mais si vous disposez d'un grand environnement SQL, c'est très utile.

Comme le dit Yaakov, exécutez le profileur pendant quelques minutes sous une charge typique et enregistrez les résultats dans une table qui vous permettra d'exécuter des requêtes sur les résultats, ce qui facilitera la détection des requêtes monopolisant les ressources.

Profiler peut ressembler à une approche « une aiguille dans une botte de foin », mais il peut s'avérer utile.Essayez de l'exécuter pendant quelques minutes pendant que les bases de données sont sous une charge typique, et voyez si des requêtes semblent prendre beaucoup trop de temps ou monopoliser les ressources d'une manière ou d'une autre.Même si une situation comme celle-ci pourrait indiquer un problème général, elle pourrait également être liée à un problème spécifique avec un ou deux sites, ce qui gâcherait suffisamment les choses dans certaines circonstances pour entraîner de très mauvaises performances à tous les niveaux.

Exécutez Profiler et filtrez les requêtes qui nécessitent plus d'un certain nombre de lectures.Pour l'application sur laquelle j'ai travaillé, toute requête sans rapport nécessitant plus de 5 000 lectures méritait un second examen.Votre application peut avoir un seuil différent, mais l'idée est la même.

Cet utilitaire par Erland Sommarskog est incroyablement utile.

C'est une procédure stockée que vous ajoutez à votre base de données.Exécutez-le chaque fois que vous souhaitez voir quelles requêtes sont actives et obtenir une bonne idée des verrous, des blocages, etc.Je l'utilise régulièrement lorsque les choses semblent gommées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top