web-dev-qa-db-ja.com

msdb..sysjobactivityの孤立したエントリ

この質問では: https://stackoverflow.com/questions/18445825/how-to-know-status-of-currently-running-jobs

この回答が提案されました:

SELECT sj.name
   , sja.*
FROM msdb.dbo.sysjobactivity AS sja
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id
WHERE sja.start_execution_date IS NOT NULL
   AND sja.stop_execution_date IS NULL

しかし、私のサーバーの1つでは、これには10か月前の日付のエントリがあります。 SQLエージェントジョブアクティビティモニターを確認しても、実行中のジョブはありません。 msdb..sysjobsを見ると、わずか3つのジョブが示されています。誰でもこの現象を説明できますか?

孤立した行には、queued_date、stop_execution_date、job_history_id、およびnext_scheduled_dateのNULLがあります。残りの値は妥当に見えます。

5
Paul

知るか!次のようなものを追加するだけです

and sja.start_execution_date >= DATEADD(dd, -1, GETDATE())

これが私の環境での私の現在の答えです。これは、毎日の実行の一部であるより大きなスクリプトとして私にとっては機能します。より良い答えや説明が利用可能であるように感じます。

2
Paul

StackOverflowの回答には、考えられる説明があります。

https://stackoverflow.com/questions/13037668/what-does-it-mean-to-have-jobs-with-a-null-stop-date/13038752#13038752

引用するには:

SQLエージェントが起動するたびに、新しい行がsyssessionsに配置され、その後実行されるすべてのジョブは、sysjobactivityでそのsession_idを取得します。停止日がnullであるジョブの場合、これらのジョブは「現在の」セッション用ではないため、エージェントが停止されたときにジョブがまだ実行中であったと考えられます。

Sysjobactivityの2つのエントリが「スタック」しているように見える同様の問題があり、start_execution_dateが6週間前のもので、stop_execution_dateがありませんでした。上記の引用の提案に従って、スタックされた各レコードのsession_idを確認し、スタックされたレコードがそれぞれ前のセッションのものであることがわかりました。

次のStackOverflowの回答は、現在のセッションのアクティビティのみを取得する方法を示しています。

https://stackoverflow.com/a/18062236/21644

彼らのコード:

SELECT
    job.name, 
    job.job_id, 
    job.originating_server, 
    activity.run_requested_date, 
    DATEDIFF( SECOND, activity.run_requested_date, GETDATE() ) as Elapsed
FROM 
    msdb.dbo.sysjobs_view job
JOIN
    msdb.dbo.sysjobactivity activity
ON 
    job.job_id = activity.job_id
JOIN
    msdb.dbo.syssessions sess
ON
    sess.session_id = activity.session_id
JOIN
(
    SELECT
        MAX( agent_start_date ) AS max_agent_start_date
    FROM
        msdb.dbo.syssessions
) sess_max
ON
    sess.agent_start_date = sess_max.max_agent_start_date
WHERE 
    run_requested_date IS NOT NULL AND stop_execution_date IS NULL
8
Simon Tewsi