L'utilisation de l'UC par la base de données?
Est-il possible d'obtenir la répartition de l'utilisation de l'UC par la base de données?
Je suis idéalement la recherche d'un Gestionnaire de Tâches de type interface pour SQL server, mais au lieu de regarder l'utilisation du PROCESSEUR de chaque PID (comme taskmgr
) ou chaque SPID (comme spwho2k5
), je veux afficher la durée totale d'utilisation de l'UC de chaque base de données. Supposons qu'une seule instance de SQL.
Je me rends compte que les outils pourraient être écrites pour recueillir ces données et en faire rapport, mais je me demandais si il n'y a aucun outil qui me permet de voir une vue en direct de bases de données qui contribuent le plus à la sqlservr.exe
charge CPU.
Vous devez vous connecter pour publier un commentaire.
En quelque sorte. Cochez cette requête:
Cela vous aidera à les requêtes dans le cache du plan afin de PROCESSEUR qu'ils ont utilisé. Vous pouvez exécuter cette opération régulièrement, comme dans une tâche de l'Agent SQL, et insérer les résultats dans une table assurez-vous que les données persiste au-delà de redémarrages.
Quand vous lisez les résultats, vous aurez probablement réaliser pourquoi on ne peut pas corréler les données directement à un individu de la base de données. Tout d'abord, une seule requête peut également masquer sa véritable base de données parent en faisant des trucs comme ça:
La requête sera exécutée dans la base de données MSDB, mais il serait de résultats d'un sondage à partir de la base de données AdventureWorks. Où faut-il attribuer la consommation de CPU?
Il y a pire quand vous:
Il va sur et sur. C'est pourquoi il est logique d'optimisation des performances au niveau de la requête au lieu de la base de données de niveau.
Dans SQL Server 2008R2, Microsoft a introduit la gestion de la performance et de l'application de gestion des fonctionnalités qui va nous permettre de package d'une base de données unique dans une distribuable et déployable DAC pack, et ils sont prometteurs fonctionnalités pour faciliter la gestion de la performance des bases de données individuelles et de leurs applications. Il n'est toujours pas ce que vous cherchez, si.
Pour plus de personnes, découvrez la T-SQL référentiel Crapaud Monde SQL Server wiki (anciennement à SQLServerPedia).
Mis à jour sur 1/29 à inclure le total des nombres au lieu de juste moyennes.
SQL Server (à partir de 2000) va installer des compteurs de performances (visible à partir de l'analyseur de Performances ou de Perfmon).
L'une des catégories du compteur (à partir d'un Serveur SQL server 2005 installer est:)
- SQLServer:Bases De Données
Avec un exemple pour chaque base de données. Les compteurs disponibles, mais ne fournissent pas un CPU % d'Utilisation du compteur ou quelque chose de similaire, bien qu'il existe des compteurs de taux, que vous pouvez utiliser pour obtenir une bonne estimation de la CPU. Exemple serait si vous avez 2 bases de données, et le taux mesuré est de 20 opérations/sec sur Une base de données et 80 trans/s sur la base de données B --- ensuite, vous savez que l'Un contribue à environ 20% du total de la CPU, et B à hauteur de 80%.
Il y a quelques défauts ici, comme c'est en supposant que tout le travail effectué est liée à l'UC, qui, bien sûr, avec les bases de données il n'est pas. Mais ce serait un début, je crois.
Voici une requête qui affiche la base de données réelle, provoquant de fortes charge. Il s'appuie sur la mise en cache de requêtes qui pourraient être vidées fréquemment dans les bas-mémoire des scénarios (pour faire une requête pour le moins utile).
Je pense que la réponse à votre question est non.
Le problème est qu'une activité sur un ordinateur peut entraîner de charge sur plusieurs bases de données. Si j'ai un processus qui est de la lecture à partir d'une base de données de configuration, la connexion à un enregistrement DB, et le déplacement des transactions dans et hors de différents DBs basés sur le type, comment partitionner l'utilisation de l'UC?
Vous pouvez diviser l'utilisation de l'UC par l'opération de charge, mais c'est encore un accidenté de la métrique qui peuvent vous induire en erreur. Comment vous répartissez vous envoi des journaux de transactions à partir d'un DB à un autre, par exemple? Est la charge CPU dans la lecture ou l'écriture?
Vous êtes mieux de regarder le taux de transaction pour une machine et la charge CPU, il provoque. Vous pouvez également le profil de procédures stockées et de voir si l'un d'entre eux prennent énormément de temps; cependant, ce ne sera pas vous obtenir la réponse que vous voulez.
Avec tous dit ci-dessus à l'esprit.
À partir de SQL Server 2012 (peut-être en 2008 ?) , il est la colonne database_id dans sys.dm_exec_sessions.
Il nous donne facile de calcul du processeur pour chaque base de données pour actuellement connecté sessions. Si la session a déconnecté, puis ses résultats ont disparu.
Prendre un coup d'oeil à SQL Sentry. Il n'tous vous avez besoin et plus encore.
Ce qui concerne,
Lieven
Avez-vous regardé le générateur de profils SQL?
Prendre la norme "T-SQL" ou des "procédures Stockées" modèle, modifiez les champs de groupe par l'ID de base de données (je pense que vous avez utilisés, le nombre, vous n'obtenez pas le nom de base de données, mais il est facile à trouver en utilisant exec sp_databases pour obtenir la liste)
Exécuter ce pour un certain temps et vous aurez le CPU total compte /e /s de Disque /d'Attente etc. Cela peut vous donner le pourcentage de CPU utilisé par chaque base de données.
Si vous surveillez le compteur PerfMon en même temps (enregistrer les données sur une base de données SQL), et faire de même pour le générateur de profils SQL (journal de base de données), vous peut être en mesure de corréler les deux ensemble.
De même, il devrait vous donner suffisamment d'indices quant à ce qui DB est intéressant de regarder plus en détail. Ensuite, faire de même avec cet ID de base de données et de rechercher le plus cher SQL ou des Procédures Stockées.
veuillez cocher cette requête: