What happens if a scheduled repeating job is taking longer time to finish than expected, thus missing next scheduled interval?

Depending on the amount of the delay and criterias for the schedule, the next execution of the job may either be delayed or completely cancelled, if the window of running the job has passed.

The kbmMW Scheduler contains some nice statistics to follow, which can be used to track if that happens, how often and provides some figures that tells about the time of executing.

The statistics can be obtained directly from the scheduled event instance you receive as result when you use Scheduler.Schedule…. But you can also iterate over all scheduled events. The following example iterates through the scheduled events, triggered by a TTimer, to be able to update a TMemo with statistics,.

procedure TForm1.Timer1Timer(Sender: TObject);
var
 i:integer;
 lst:TList<IkbmMWScheduledEvent>;
 e:IkbmMWScheduledEvent;
begin
 if not chbStats.Checked then
 exit;
 lst:=Scheduler.Events.Events.BeginRead;
 try
   mStats.Clear;
   for i:=0 to lst.Count-1 do
   begin
     e:=lst.Items[i];
     mStats.Lines.Add(inttostr(i)+') ID='+e.ID+' Name='+e.Name+' Runs='+inttostr(e.Runs)+' Stalls='+inttostr(e.Stalls)+' TotalStalls='+inttostr(e.TotalStalls)+' LastRunTaken='+inttostr(e.LastRunTaken)+' TotalTimeTaken='+inttostr(e.TotalTimeTaken));
   end;
 finally
   Scheduler.Events.Events.EndRead;
 end;

The scheduled events have a number of properties to access for statistics:

  • Runs indicate how many times the event has run in total.
  • Stalls indicate how many times the event should have run, but was unable to due to either still running or the thread pool exhausted at the time, since last time a successful run happened.
  • TotalStalls counts total number of stalls.
  • LastRunTaken shows how many mSecs last run lasted.

When TotalStalls increase fairly regularly it indicates that either too many events are defined compared to size of the relaxed thread pool (increase RelaxedPoolSize which is default 20), or some events are taking longer time than expected to run and thus can’t be timely rescheduled.

kbmMW Scheduler Tidbits #1 – Async methods

kbmMW Scheduler Tidbits #2 – CRON

kbmMW Scheduler Tidbits #4 -Relaxed vs precise recurrent jobs

Loading

3 thoughts on “kbmMW Scheduler Tidbits #3 – Handling delays”

Leave a Reply to kbmMW Scheduler Tidbits #4 -Relaxed vs precise recurrent jobs Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.