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.

Michael Hedgpeth
la source

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.

yrushka
la source
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.

jcolebrand
la source
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".

Gaius
la source
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.

datagod
la source