Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

Równoległość jobów w SQL Server Agent

W ostatnim czasie ćwiczyłem się trochę zrównoleglanie zadań. Uruchamiałem jednocześnie kolejne części zadania jako joby SQL Server Agenta, spodziewając się skrócenia całościowego czasu wykonania. Pierwsze wyniki były oczywiście niezadawalające – ogólny czas wykonania zadania wzrósł. Gdy zacząłem szukać przyczyny problemu, okazało się że z 50 jednocześnie uruchomionych zadań wystartowało tylko 40. Pozostałe 10 oczekiwało na zakończenie poprzednich – dawało się to łatwo zaobserwować na historii jobów. 10 z nich po prostu startowało później o kilka sekund niezależnie od tego, jak proste było zadanie.

Zacząłem szukać, gdzie można przestawić ten parametr. Niestety w interfejsie SSMS tego nie znalazłem. Okazało się jednak, że parametr istnieje i nawet jest opisany w bazie wiedzy. Artykuł dotyczy wprawdzie SQL Server 2000, ale na szczęście jest też wzmianka, gdzie funckjonalność przewędrowała na SQL Server 2005. Otóż, parametr ten trafił do tabeli syssubsystems bazy msdb. Co ciekawe, żeby go przestawić, trzeba najzwyczajniej na świecie tabelę tę zupdate’ować. O tak:

UPDATE msdb.dbo.syssubsystems SET max_worker_threads = 50 WHERE subsystem = 'TSQL';

W czasach, w których odwykliśmy już na dobre od update’owania tabel systemowych wygląda to niepokojąco, ale działa. Wystarczy już tylko restart usługi SQL Server Agent i 50 równoległych zadań przestaje być problemem. Dla Agenta oczywiście – sam SQL to zupełnie inna historia. Do opowiedzenia kolejnym razem…

Opublikowane 9 lipca 2009 10:03 przez mad

Komentarze:

# Marek Adamczuk : Równoległość jobów w SQL Server Agent

9 lipca 2009 17:07 by dotnetomaniak.pl

Dziękujemy za publikację - Trackback z dotnetomaniak.pl

Komentarze anonimowe wyłączone