2010-10-19 27 views
9

j'ai quelques tâches planifiées dans mon agent SQL:Comment prévenir l'emploi Sql Server pour exécuter simultanément

  • Job1, exécuter toutes les 2 minutes
  • Job2, exécuter toutes les 10 minutes
  • Job3, exécuter tous les 15 minutes

Comme vous pouvez le voir, plusieurs tâches peuvent s'exécuter simultanément. Lorsque ces tâches s'exécutent simultanément, l'utilisation du processeur passe à 100%.

Existe-t-il une solution? Existe-t-il un moyen de contrôler le nombre de tâches en cours d'exécution? Remarque: J'ai besoin de ces travaux pour exécuter environ dans leur période appropriée.

+0

Vous pouvez utiliser Mutex pour empêcher l'exécution simultanée de plusieurs tâches - quelle langue utilisez-vous pour envoyer les requêtes SQL à la base de données? – SlappyTheFish

+0

ce sont des emplois en SQL Server Agent. – ehsan

Répondre

12

Utilisez un verrou de session via sp_getapplock

Vous vous demandez contrôlé par l'utilisateur concurrency et ce qui est généralement la meilleure façon.

Ceci vous permet d'attendre ou d'abandonner si le verrou est déjà occupé par un autre travail. Nous l'utilisons en un ou deux endroits pour empêcher plusieurs utilisateurs de forcer la même tâche à se chevaucher. Ça marche bien.

+3

+1: Dam Je voudrais savoir à propos de cette année. Auparavant, j'avais roulé ma propre solution à cette saveur de problème en utilisant une table de statut pour surveiller l'état actuel d'un processus donné. –

+0

@John Sansom: Heureux d'être de service ... Si vous pouvez utiliser les verrous de transaction, il est aussi auto-relâcher. – gbn