אילו ג'ובים רצים כרגע / רצו קודם (2)?

19/12/2011

תגיות: ,
אין תגובות

לפני כחודש וחצי פרסמתי פוסט בו הצעתי דרך מעט מסורבלת להציג מידע על ג'ובים שרצים כרגע.
השליפה התבססה על הפלטים של פרוצדורות המערכת SP_Help_Job ו-SP_Help_JobActivity מכיוון שלא מצאתי את המידע המבוקש בטבלאות המערכת.
בזמן שעבר מאז הצלחתי להגיע למידע החסר, ולהרחיב את הסקריפט הקודם כך שיציג מידע לגבי הג'ובים שרצים כרגע ושרצו קדם, כולל הצעדים השונים שלהם.
השליפה מעט כבדה, מצריכה הרשאות קריאה מ-msdb, והנה היא לפניכם:

Select  SJ.name,

        SJ.description,

        IsNull(JA.last_executed_step_id,0)+1 [Step],

        SJS.step_name,

        'In progress' Job_Run_Ststus,

        'In progress' Step_Run_Ststus,

        SJS.database_name,

        SJS.command [SQL],

        JA.start_execution_date [Job_Begin],

        Null Job_End,

        SP.login_time [Step_Begin],

        Null [Step_End],

        SJS.output_file_name

From    master.dbo.sysprocesses SP

Inner Join msdb.dbo.sysjobs SJ

        On SubString(program_name,48,16)=Replace(Right(job_id,18),'-','')

Inner Join msdb.dbo.sysjobsteps SJS

        On SJ.job_id=SJS.job_id

Inner Join msdb.dbo.sysjobactivity JA

        On SJ.job_id=JA.job_id

        And JA.start_execution_date Is Not Null

        And JA.job_history_id Is Null

        And IsNull(JA.last_executed_step_id,0)+1=SJS.step_id

Union All

Select  SJ.name,

        SJ.Description,

        JH.step_id Step,

        JH.step_name,

        Case IsNull(JHs.run_status,4) When 0 Then 'Failed'

                                      When 1 Then 'Succeeded'

                                      When 2 Then 'Retry'

                                      When 3 Then 'Canceled'

                                      When 4 Then 'In progress'

                                      End Job_Run_Ststus,

        Case JH.run_status When 0 Then 'Failed'

                                      When 1 Then 'Succeeded'

                                      When 2 Then 'Retry'

                                      When 3 Then 'Canceled'

                                      When 4 Then 'In progress'

                                      End Step_Run_Ststus,

        SJS.database_name,

        SJS.command SQL,

        IsNull(JHs.Job_Begin,(Select Max(start_execution_date) From msdb..sysjobactivity Where job_id=SJ.job_id)) Job_Begin,

        JHs.Job_End,

        JH.[Step_Begin],

        JH.[Step_End],

        SJS.output_file_name

From    (Select *,

                msdb.dbo.agent_datetime(run_date,run_time) [Step_Begin],

                msdb.dbo.agent_datetime(run_date,run_time)+msdb.dbo.agent_datetime(19000101,run_duration) [Step_End]

        From    msdb..sysjobhistory

        Where   step_id<>0) JH

Left Join (Select *,

                msdb.dbo.agent_datetime(run_date,run_time) [Job_Begin],

                msdb.dbo.agent_datetime(run_date,run_time)+msdb.dbo.agent_datetime(19000101,run_duration) [Job_End]

        From    msdb..sysjobhistory

        Where   step_id=0) JHs

        On JH.[Step_Begin]>=JHs.[Job_Begin]

        And JH.[Step_End]<=JHs.[Job_End]

Inner Join msdb.dbo.sysjobs SJ

        On JH.job_id=SJ.job_id

Inner Join msdb.dbo.sysjobsteps SJS

        On SJ.job_id=SJS.job_id

        And JH.step_id=SJS.step_id

Order By name,

        Job_Begin,

        Step;

clip_image002

בשליפה שני חלקים המחוברים על ידי Union,

כאשר הראשון מתייחס ל-Steps שרצים כרגע,

והשני ל-Steps שהסתיימו בג'ובים שעדיין רצים, ולג'ובים (כולל ה-Steps) שכבר הסתיימו.

בצילום המסך ניתן לראות מספר ריצות שהסתיימו (יש ערך בעמודה Job_End),

מספר Steps שהסתיימו בריצה שעדיין פעילה (יש ערך בעמודת Step_End אך לא ב-Job_End),

ו-Step שעדיין רץ (אין ערך בעמודה Step_End).

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *