Quelle est la meilleure façon de surveiller les requêtes de longue durée dans SQL Server?


10

Je dois exécuter pas mal de requêtes de longue durée (reconstruction d'index, mise à jour de grands ensembles de données) pour ma base de données. Existe-t-il une alternative à l'exécution de la requête dans SQL Server Management Studio et à sa vérification toutes les heures environ? J'aimerais recevoir un e-mail ou un message une fois terminé, mais je ne connais pas le meilleur outil pour cela.

Réponses:


4

Après la publication de Gaius: Vous pouvez créer un script .SQL qui fait ce dont vous avez besoin en utilisant db devant le script -> créer un travail SQL Agent de type Système d'exploitation qui appelle le script:

sqlcmd -E -S SERVERNAME -i "c: \ YOURSCRIPT.sql" -o "C: \ YOURSCRIPT_LOG.log"

Ajoutez une nouvelle étape et utilisez la procédure msdb.dbo.sp_send_dbmail pour envoyer des e-mails. Cette fonctionnalité peut être personnalisée pour afficher à l'intérieur du courrier une requête spécifique à partir des tables SQL pour confirmer l'exécution du script ... par exemple dbcc showcontig de vos index de reconstruction.


1

Avez-vous la possibilité d'utiliser des tâches SQL? Vous pouvez faire des notifications et autres par là-bas. En ce qui concerne les notifications intermittentes, cela nécessiterait du code dans les procédures stockées, etc.


1

Oui, utilisez simplement xp_sendmail . Vous pouvez envoyer un message prédéfini ou les résultats d'une instruction SQL tout aussi facilement. Cette fonctionnalité est disponible depuis SQL Server 6.5, mais elle devrait être obsolète à Denali - si cela doit faire partie permanente de votre opération, vous devez utiliser Database Mail, qui est beaucoup plus "entreprise".


1

J'écris toujours des messages dans une table "EventLog". Lors du traitement de grandes quantités de données, je gère les données par blocs et j'écris des mises à jour de statut dans EventLog après chaque bloc.

Lorsque je veux vérifier la progression du long processus, je demande simplement la table EventLog.

Exemple de sortie:

-------------------
- Ma grande mise à jour -
-------------------
Commencé: 2011-05-03 10:00:00

Enregistrements à traiter: 1 000 000
Morceaux: 200

--- Morceau 1 ---
Tentative de mise à jour de MyTable
Enregistrements mis à jour: 5000
Dossiers restants: 995 000
Débit: 4210 enregistrements par seconde

--- Morceau 2--
Tentative de mise à jour de MyTable
Enregistrements mis à jour: 5000
Nombre de documents restants: 990 000
Débit: 3555 enregistrements par seconde

--- Morceau 3--
etc.

J'ai également des colonnes dans la table EventLog pour suivre quand le message a été écrit, quel processus a écrit le message, etc. Désolé de ne pas inclure cette information dans mon exemple.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.