Job w mssql - przerwy w wywoływaniu

0

Witam,

Mam joba, który wywołuje co minutę procedurę w bazie danych. Problem polega na tym, że czasami ma dziwne przerwy w działaniu np wywołuje się cały dzień co minutę i nagle przestaje się wywoływać(czasem 2,3 razy na dobę) na 20 minut(czasem mniej czasem więcej). Najgorsze jest to, że nie zwraca błędów do logów. Przejrzałem już logi agenta, sql serwera i systemowe, ale nie widzę żadnego powiązania miedzy wpisami w logach a przerwami w działaniu joba. Czy ktoś spotkał się z podobną sytuacją ?

0

Cześć,
A w skrócie, co robi procedura?Może to być jakiś problem z poziomami izolacji np.w momencie w którym procedura chce wprowadzić, odczytać jakieś dane akurat ten zasób jest zablokowany (może też się tworzyć dead lock) a lock out time jest ustawiony na jakąś stosunkowo krótką wartość.

Ja bym do joba dodał insert do test tabeli i zobaczył, czy jest to problem z nieuruchamianym jobem czy z zasobami.To tak na początek.

Pozdrawiam

0

Procedura dopisuje numery do rekordów w tabeli. Jeśli chodzi o logi to już dawno to zrobiłem :) aczkolwiek muszę to sprawdzić jeszcze raz bo dodałem pierwszego inserta z logowaniem między Begin Transaction a pierwszą wykonywaną operacją. Czy istnieje możliwość że procedura zawiesza się jeszcze przed rozpoczęciem transakcji? Przed jej otworzeniem są tylko suche deklaracje zmiennych.

0

A co to za numery i czemu nadaje je procedura?
Jak długo wykonuje się cała procedura?

0

Na początku trzeba wykluczyć, że coś jest źle PO TYM jak już się uruchamia JOB.
Ja bym stworzył tabelę testową z atrybutami ID, (start)datetime2, end(datetime2)i ERRORID. Przed tym jak zaczyna się transakcja(i przed deklaracją zmiennych) w procedurze wrzucam do test tabeli :idenetity do id , sysdatetime()-atrybut start, end zostawiam nula na razie, i do errorid wrzucam 1. Jak już wszystko się zrobi w procedurze , updatuje atrybut end (sysdatetime()) i errorid updatuje do 0. Potem z test tabeli, najpierw wybieram sobie rekordy errorid 1-to znaczy, że się zaczął job a nie skończył, możesz też wziać timedifference z start i end-pokaże Ci ile to wszystko trwało. Jeżeli liczba rekordów w test tabeli będzie niższa niż liczba liczba kiedy powinien uruchomić się job to wiem, że problem jest z jobem bo się nie uruchamia a nie z procedurą samą w sobie.

1

Sprawdź jak masz ustawiony parametr WAITFORDELAY. Jak jest dłuższy niż czas co jaki odpalasz procedurę to agent od zadań, który ogarnia ten bajzel stwierdzi, że poprzedni job się jeszcze nie skończył i nie odpali nowego by nie dopuścić do locków i innych takich przykrych wydarzeń. Oczywiście nie raczy zaraportować do logu, że podjął taką decyzję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1