次の方法で共有


System Center Service Manager でのスタックしたデータ ウェアハウス ジョブのトラブルシューティング

この記事は、System Center Service Manager で特定のデータ ウェアハウス ジョブがハングする問題のトラブルシューティングに役立ちます。

元の製品バージョン: System Center 2016 Service Manager、System Center 2012 R2 Service Manager、System Center 2012 Service Manager
元の KB 番号: 4040022

まとめ

この記事は、次のデータ ウェアハウス ジョブがハングした場合のトラブルシューティングに役立ちます。

  • MPSyncJob
  • DWMaintenance
  • Service Manager 管理グループとデータ ウェアハウス管理グループのジョブを抽出する
  • Transform.Common
  • Load.Common
  • Load.CMDWDataMart
  • Load.OMDWDataMart

ハングしたデータ ウェアハウス ジョブの症状には、次のようなものがあります。

  • ジョブの状態は、Service Manager コンソールの Running または PowerShell の結果です。 ただし、ジョブは長時間 (たとえば、数時間以上) 実行されます。
  • ジョブの開始時刻と終了時刻に一貫性がありません。
  • レポートにデータや新しいデータが表示されません。 これは、抽出、変換、読み込み (ETL) ジョブが実行されていないことを示している可能性があります。

この記事で取り上げられていない問題:

  • 個々のモジュールで発生するエラー
  • Transform.Common 特定のモジュールが失敗またはタイムアウトしたときに発生するエラー
  • 管理パックの同期エラー
  • キューブ処理の問題
  • データ整合性の問題

ステージングデータベースと構成データベースを理解する

DWStagingAndConfig データベースは、トラブルシューティング時に使用するデータベースです。 データベース内のテーブルの一覧を次に示します。

  • Infra.Process

    ProcessNameProcessIdなど、ジョブに関する情報を格納します。

  • Infra.ProcessModule

    VertexName (ProcessModuleの名前)、ProcessModuleIdModuleConfigなど、ProcessModulesに関する情報を格納します。

  • Infra.ProcessCategory

    ProcessCategoryNameIsEnabledなど、プロセス カテゴリに関する情報を格納します。 このカテゴリ内のすべてのプロセスを実行するには、 IsEnabled の値を 1 する必要があります。

  • Infra.Batch

    BatchIdBatchStartTimeBatchEndTimeなど、すべてのバッチに関する情報を格納します。

  • Infra.WorkItem

    バッチのすべての WorkItems に関する情報を格納します。 この表では、バッチの失敗した WorkItems に関するエラーを確認できます。

  • Infra.Status

    それぞれの StatusIdsに関する情報を格納します。 Infra.Status テーブルから返されるデータを次に示します。

    StatusId StatusName 説明
    1 Success Success
    2 失敗 失敗
    3 開始前 開始前
    4 実行中 実行中
    5 Stopped Stopped
    6 Completed Completed
    7 待機中 待機中

    データ ウェアハウス ジョブがスタックする最も一般的な理由は、データ ウェアハウス管理サーバーが Microsoft SQL Server との通信を失った場合です。 これは、Service Manager 管理者の知識がなくても SQL Server が更新された場合に発生します。 データ ウェアハウス管理サーバーの Operations Manager イベント ログを調べて、それが理由であるかどうかを判断できます。

その他の理由から、Windows PowerShell コマンドレットと SQL Server ステートメントを使用してトラブルシューティングを行うことができます。 次の解決プロセスでは、すべての PowerShell コマンドレットがデータ ウェアハウス管理サーバーで実行され、SQL Server ステートメントが DWStagingAndConfig データベースに対して実行されます。

準備

  1. SQL Server Management Studio を起動し、 DWStagingAndConfig データベースをホストする SQL Server に接続できることを確認します。

    SQL Server インスタンスを見つけるには、レジストリを確認するか、次のコマンドを入力します。

    $sql = Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Database";$sql.StagingSQLInstance
    
  2. 次のコマンドを使用して、ジョブとその現在の状態の一覧を取得します。

    $jobs = Get-SCDWJob;$jobs | ft -autosize
    

    結果が返されない場合、またはエラーが発生した場合は、次のコマンドを使用してデータ ウェアハウス コマンドレット モジュールを読み込み、前のコマンドを再実行します。

    import-module (((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Setup").InstallDirectory)+ "Microsoft.EnterpriseManagement.Warehouse.Cmdlets.psd1")
    

すべてのジョブ スケジュールを無効にする

次のコマンドを使用して、すべてのジョブ スケジュールを無効にし、すべてのスケジュールが無効であることを確認します (ScheduleEnabled=False)。

foreach($job in $jobs){Disable-SCDWJobSchedule -jobname $job.name};Get-SCDWJobSchedule | ft -autosize

実行中のすべてのジョブが完了するまで待ちます

実行中のすべてのジョブが完了するまで、次のコマンドを繰り返し実行します。

Get-SCDWJob

特定のジョブが永久に実行されるように見える場合は、次の手順を使用してジョブをリセットします。

Note

現在実行中のジョブに干渉しないようにするには、ジョブが永久にフリーズまたは実行されているように見えない限り、次の手順に進む前にすべてのジョブを終了させます。

HealthService サービスを停止する

  1. Service Control Manager (Services.msc) を使用して、 Microsoft Monitoring Agent サービス (HealthService.exe) を停止します。

    Net Stop HealthService コマンドまたは Stop-Service コマンドレットを使用してサービスを停止することもできます。

  2. ヘルス サービス State フォルダーの名前を変更します。

    フォルダーの場所を見つけるには、次のコマンドを使用します。

    $dir = Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\System Center\2010\Common\Setup";$dir.installdirectory
    

スタックしたジョブのすべてのモジュールの状態を [完了] に設定します (StatusId = 6)

  1. Get-SCDWJob コマンドレットの結果で、スタックしているジョブのBatchIdを見つけます。

    出力例を次に示します。

    BatchId Name 状態 CategoryName StartTime EndTime IsEnabled
    8806 Load.Common 実行中 積載量 2016 年 12 月 2 日午前 7:44:00 はい
  2. SQL Server Management Studio で、次のステートメントを実行します。

    UPDATE Infra.WorkItem SET StatusId = 6 WHERE BatchId = '<BatchId>'
    UPDATE Infra.Batch SET StatusId = 6 WHERE BatchId = '<BatchId>'
    
  3. Get-SCDWJobを再実行して状態を確認します。

スタック したジョブの新しいバッチを作成する

  1. 次の SQL Server ステートメントを実行します。

    EXEC Infra.CreateBatch '<JobName>'
    
  2. Get-SCDWJob再実行し、ジョブに新しいBatchIdがあり、状態が [開始であることを確認します。

すべてのロックを解放する

  1. 次の SQL Server ステートメントを実行してロックを取得します。

    SELECT * FROM LockDetails
    
  2. 結果が空でない場合は、次のステートメントを実行してロックを解除します。

    EXEC dbo.ReleaseLock
    @ResourceName = '<ResourceName>',
    @LockRequester = '<LockRequester>'
    
  3. すべてのロックが解除されるまで、手順 1 と 2 を繰り返します。

ジョブの状態を確認する

  1. 次のコマンドを実行します。

    Get-SCDWJob
    
  2. 次のスクリーンショットのような出力が表示されていることを確認します。

    Get-SCDWJob コマンドの出力。ジョブの状態を確認するために使用できます。

    影響を受けるジョブに新しい BatchId があり、すべてのジョブの値が IsEnabledTrue を持っていることを確認します。 IsEnabledのジョブに False が表示される場合は、次の SQL Server ステートメントを実行します。

    UPDATE infra.ProcessCategory SET IsEnabled = 1 WHERE IsEnabled = 0
    

影響を受けるジョブが正しく実行されるかどうかをテストする

次のコマンドを使用して、影響を受けるジョブを開始します。

Start-SCDWJob -jobname \<JobName>

ジョブが正常に完了した場合は、次の手順に進みます。

すべてのジョブ スケジュールを有効にして HealthService サービスを再起動する

  1. 次のコマンドを使用して、すべてのジョブ スケジュールを有効にし、すべてのスケジュールが有効になっていることを確認します (ScheduleEnabled=True)。

    foreach($job in $jobs){Enable-SCDWJobSchedule -jobname $job.name};Get-SCDWJobSchedule | ft -autosize
    
  2. Microsoft Monitoring Agent サービス (HealthService.exe) を開始します。

ジョブの状態を確認する

  1. 次のコマンドを実行します。

    Get-SCDWJob
    

    出力は次のスクリーンショットのようになります。

    Get-SCDWJob コマンドを実行してジョブの状態を確認する出力。

    Note

    一部のプロセス カテゴリが無効になっていることがわかります。 DWMaintenanceMPSyncJobが同期のプロセスを無効にする可能性があるため、これは正常です。

  2. ジョブが正しく実行されていることを確認するには、しばらくの間ジョブを監視します。

  3. 発生した問題が発生しなくなったことを確認します。 レポートの問題の場合、レポートが現在の結果で更新されるまでに数時間かかる場合があります。