長時間実行ジョブ

Microsoft.SQLServer.Linux.Monitor.Agent.LongRunningJobs (UnitMonitor)

このモニターは、長時間実行 SQL エージェント ジョブを確認します。
SQL Server エージェント サービスは、どのエディションの SQL Server Express でもサポートされていないため、適切な検出されたオブジェクトがないことにご注意ください。このモニターは既定で無効になっています。必要に応じて、上書きを使用してモニターを有効にしてください。

Knowledge Base article:

概要

このモニターは、実行時間が長い SQL エージェント ジョブを確認します。構成されているしきい値より長い時間ジョブが実行されると、警告またはエラー アラートが出されます。

既定では、このモニターはスケジュールの種類が [SQL Server エージェントの開始時に自動的に開始] のジョブは監視しません。こうしたジョブは SQL エージェントが停止するまで実行される (つまり継続的に実行される) ことが多く、これが通常動作であるためです。通常、SQL Server レプリケーションではそのようなジョブを使用します。しかし、場合によってはスケジュールの種類が [SQL Server エージェントの開始時に自動的に開始] のジョブが、比較的短い間隔で実行されることがあります。こうしたジョブを監視するには、そのようなジョブ名で構成されるコンマ区切りの一覧を使用して [継続的に実行されるジョブが含まれています] パラメーターを上書きします。一覧のジョブ名は、次に挙げるいずれかの識別子クラスの要件を満たす必要があります。

1) 標準:

2) 区切り記号:

上記のいずれかのクラスに属する名前は、区切り記号文字を除いて 1 文字から 128 文字の間にする必要があります。

原因

異常な状態になるのは、定義されたしきい値よりも長く実行されていた SQL Server エージェント ジョブがあるためです。そのジョブに問題がある可能性があります。

SQL Server エージェントは、特定の時刻または間隔で実行されるようにスケジュールされた SQL Server タスクを実行したり、事態に対処するために管理者によって定義されたアクション (ポケットベルまたは電子メールでだれかに警告するなど) またはタスクが対象とする特定の条件を検出したりします。また、SQL Server エージェントは、管理者によって定義されたレプリケーション タスクの実行にも使用されます。

警告またはエラー状態の原因となったジョブを識別するには、状態の変更またはアラートのコンテキスト データを調べます。

解決方法

SQL Server Management Studio を確認して、実行されているジョブを識別します。これらのジョブが必要以上に長く実行されている場合は、ジョブを調査して原因を見つけます。

sp_help_jobactivity を使用して、現在実行しているジョブに関する情報を表示します。

また、長時間実行されることが想定されるエージェント ジョブがある場合は、次の方法を取ることもできます。

上書き可能なパラメーター

名前

説明

既定値

アラートの優先順位

アラートの優先度を定義します。

標準

アラートの重大度

アラートの重要度を定義します。

MatchMonitorHealth

重大しきい値 (分単位)

このモニターは、値がこのしきい値を超えた場合、状態を重大に変更します。このしきい値と警告しきい値の間 (両端を含む) にある場合、モニターは警告状態になります。

120

有効

ワークフローを有効または無効にします。

いいえ

アラートを生成する

ワークフローがアラートを生成するかどうかを定義します。

はい

継続的に実行されるジョブが含まれています

SQL エージェント ジョブの中には無限に (エージェントが停止するまで) 実行されるものがあります。そのような SQL エージェント ジョブのスケジュールの種類は通常、[SQL Server エージェントの開始時に自動的に開始] です。たとえば SQL Server レプリケーションではしばしばその種のジョブが使用されます。このジョブを実行すると false アラートが発生し、既定ではモニターで無視されます。ただし、ジョブの実行時間が短い場合は考慮に入れられることもあります。そのようなジョブを監視するには、それらのジョブの名前をコンマ区切りのリストで定義する必要があります。

 

間隔 (秒)

ワークフローを実行する定期的な実行間隔 (秒)。

600

同期時刻

24 時間形式で指定した同期時刻。省略可能です。

 

タイムアウト (秒)

ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。

300

データベース接続のタイムアウト (秒)

指定された期間中にデータベースにアクセスできない場合、ワークフローは失敗し、イベントが登録されます。

15

警告しきい値 (分単位)

警告しきい値。このしきい値を超えると、モニターが少なくとも警告状態に変わります。

60

Element properties:

TargetMicrosoft.SQLServer.Linux.Agent
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledFalse
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Linux.MonitorType.Agent.LongRunningJobs
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL on Linux: 長時間実行ジョブ
コンピューター {0} 上の SQL インスタンス {1} に長時間実行されているエージェント ジョブがあります。これは、1 つまたは複数のジョブに問題があることを示している可能性があります。
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Linux.Monitor.Agent.LongRunningJobs" Accessibility="Public" Enabled="false" Target="SqlDiscL!Microsoft.SQLServer.Linux.Agent" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Linux.MonitorType.Agent.LongRunningJobs" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Linux.Monitor.Agent.LongRunningJobs.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="UnderThreshold1" MonitorTypeStateID="UnderThreshold1" HealthState="Success"/>
<OperationalState ID="OverThreshold1UnderThreshold2" MonitorTypeStateID="OverThreshold1UnderThreshold2" HealthState="Warning"/>
<OperationalState ID="OverThreshold2" MonitorTypeStateID="OverThreshold2" HealthState="Error"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<InstanceName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<Threshold1>60</Threshold1>
<Threshold2>120</Threshold2>
<IncludedJobs/>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>300</TimeoutSeconds>
<IntervalSeconds>600</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>