Korzystam z SQL Server Agent, aby planować nawet zadania inne niż bazy danych - czy to zły pomysł?


13

Ponieważ jestem DBA (aw wielu przypadkach de facto sysadmin), SQL Server jest instalowany na prawie każdym serwerze, z którym muszę regularnie pracować. Ostatnio zdałem sobie sprawę, że używam SQL Agenta jako harmonogramu zadań w prawie każdym przypadku, a nie natywnego harmonogramu zadań Windows.

Z mojej perspektywy SQL Agent ma wiele zalet w porównaniu z natywnym Harmonogramem zadań Windows:

  • Zdalne (z mojej stacji roboczej) uruchamianie / zatrzymywanie / monitorowanie zadań
  • Wspólne harmonogramy (zamiast każdego zadania na własną rękę)
  • Wiele kroków i kontrola przepływu
  • Różne rodzaje zadań
  • Alerty o niepowodzeniu / zakończeniu
  • Może być skonfigurowany do działania jako różni użytkownicy
  • (Umiarkowanie) opisowe komunikaty o błędach, a nie tylko kod błędu

Nie mogę jednak uniknąć wrażenia, że ​​jest to zła praktyka - agent SQL powinien być zarezerwowany tylko do zadań związanych z bazą danych i powinienem pozostawić zadania na poziomie systemu operacyjnego uruchomione w Harmonogramie zadań systemu Windows, pomimo mojej niechęci do jego użyteczności.

Czy można w ten sposób polegać na agencie SQL? Jeśli nie, czy powinienem rozważyć harmonogram zadań systemu Windows innej firmy, aby uzyskać niektóre z funkcji, których szukam?


Jeśli to należy do SF zamiast tutaj, daj mi znać, a ja go tam przeniesie, ale pomyślałem, że to należy tutaj, ponieważ używam narzędzia bazy danych i jestem zainteresowany, aby sprawdzić, czy inni administratorzy DBA / SA robią to samo.
SqlRyan

Odpowiedzi:


7

Osobiście uważam, że największym zastrzeżeniem byłaby trudność w utrzymaniu uporządkowanej listy miejsc pracy. O ile mi wiadomo, nie można tworzyć folderów do organizowania zadań, więc duża liczba byłaby uciążliwa. Nie jestem tego jednak w 100% pewien, ponieważ żaden z moich serwerów nie ma więcej niż kilkanaście zadań. Server 2008 i późniejsze Harmonogram zadań pozwala na znacznie łatwiejszą organizację, IMO, i ogólnie ma znacznie lepszą funkcjonalność niż poprzednie wersje. Jestem pewien, że aplikacje innych firm wykonują jeszcze lepszą pracę. Płakałbym, gdybym musiał użyć harmonogramu zadań Server 2003 lub at.exe.

Drugim zastrzeżeniem, które mogę wymyślić, byłoby potencjalnie zbyt duże obciążenie serwera SQL. Agent jest małym programem, ale wykonywanie długiego lub złożonego zadania może z łatwością zużyć wiele zasobów. Te zasoby nie byłyby dostępne dla silnika SQL. Ponieważ silnik SQL jest zaprogramowany tak, aby zajmował około 80% dostępnej pamięci systemowej, może to stanowić problem.

Po trzecie, problemem może być tworzenie kopii zapasowych. Będziesz musiał nie tylko wykonać kopię zapasową systemu plików, ale także bazy danych msdb, aby umożliwić odzyskanie zadań (lub użyć czegoś do skryptu zadań do pliku tekstowego). To dodaje warstwę złożoności do odzyskiwania po awarii.

Wreszcie, nie chcesz być w sytuacji, w której płacisz za licencję na SQL Server tylko po to, aby uruchomić SQL Server Agent. Jeśli baza danych zostanie wycofana z eksploatacji, musisz opracować plan migracji z SQL Server Agent.


Wszystkie solidne punkty - dziękuję za zastrzeżenia. Byłbym zaniepokojony numerem 3, z tym wyjątkiem, że nie jestem pewien, jak utworzyłbyś kopię zapasową listy zaplanowanych zadań z natywnego programu planującego Window, więc byłbym (w tej chwili) przygotowany całkowicie stracić tę listę, chociaż Jestem pewien, że jest jakiś sposób na zachowanie kopii. Organizacja może być największym problemem - żaden z moich serwerów nie jest jeszcze w tym momencie, ale widziałbym, jak się tam dostają, gdybym nie miał dobrego systemu.
SqlRyan

9

W poprzednim zadaniu robiłem dokładnie to, głównie dlatego, że wszystkie zadania były uruchamiane z naszego centralnego, podstawowego klastra, który był najbardziej widocznym serwerem. Widziałem wszystkie nasze zaplanowane zadania w jednym miejscu zamiast konieczności sprawdzania wiersza poleceń na kilku serwerach.

Chociaż jest to w dużej mierze subiektywne (i ciężko będzie uzyskać „poprawną” odpowiedź w tym formacie), nie sądzę, aby w tym podejściu było coś złego poza tym, że stało się ono pojedynczym punktem niepowodzenia.

Może to nie być istotne, jeśli wszystkie zadania współdziałają z serwerem bazy danych lub są zależne od uruchomionego serwera bazy danych i usług SQL Server (w naszym przypadku tak było).

Aha, musisz dodać obsługę błędów w przypadkach, gdy serwer, na którym zadanie próbuje uruchomić, nie działa - coś, czego nie musiałbyś robić, gdyby zadanie zostało skonfigurowane na tym serwerze.


Doceniam informację zwrotną - wydaje mi się, że pytanie jest dość subiektywne, ponieważ każda metoda wykonuje zadanie - ale szukam albo pewnej weryfikacji, że „tak, zadania systemu Windows pozostawiają wiele do życzenia” lub „Nie, to okropne pomysł, oto dlaczego ... „Zobaczymy, co się stanie!
SqlRyan

Jestem pewien, że ludzie poprawią pracę w PowerShell, zanim weźmiesz zbyt wiele oddechów. Osobiście uważam, że te i zadania systemu Windows są nieco bardziej uciążliwe, ale przebieg może się różnić.
Aaron Bertrand

0

~ Prawdopodobnie ~ wziąłbym agenta SQL nad menedżerem zadań Windows ... oczywiście w przypadku zadań związanych z bazą danych.

Jeśli możesz w ogóle kodować lub masz osoby, które potrafią kodować, możesz zrobić sporo z aplikacjami konsoli i zawinąć je w kreatora usług, takiego jak TopShelf (http://topshelf-project.com/). Może to być tani / łatwy hack, aby uzyskać trochę odsprzęgania od agenta SQL dla wszystkiego i zacząć dawać również warstwę do kolejkowania, jeśli jesteś w tym momencie.

Osobiście wydajesz się, że troszczysz się o to wystarczająco dobrze, a także wiesz wystarczająco dużo o swoich problemach, że myślę, że nic ci nie będzie. Ludzie się tym nie przejmują / wiedzą, że naprawdę się o mnie martwię. Nie mam wątpliwości, że będziesz oceniać swoje rozwiązania w rozsądnych odstępach czasu i postępować zgodnie z nimi.


-1

Inną opcją jest utworzenie tabeli dla zaplanowanych zadań za pomocą procedury składowanej, aby zaktualizować z niej tabelę kolejek komunikatów. Następnie SQL Server Agent co jakiś czas wywoływał procedurę przechowywaną, aby tworzyć komunikaty i aktualizować status zadania. Inne systemy sprawdzałyby tabelę kolejek komunikatów za pośrednictwem połączenia SQL lub warstwy interfejsu API sieci Web jako JSON.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.