PowerPivot スケジュールされたデータ更新が失敗し、"操作がタイムアウトしました" というエラーが表示される

この記事は、サポート エスカレーション エンジニア の Rick Andring によって記述されました。

現象

1 つ以上のデータ ソースを含む PowerPivot ブックを作成し、そのブックを Microsoft SharePoint Server 2016 にアップロードすることを想定しています。 ブックを更新するようにスケジュールすると、更新は失敗し、次のエラーが発生します。

操作がタイムアウトしました。

更新履歴を展開すると、失敗したデータ ソースの更新が正確に 100 秒間実行されます。

スクリーンショットは、失敗したデータ ソースの更新がデータ更新履歴ページで 100 秒間実行されることを示しています。

一部のデータ ソースが成功するか、すべてのデータ ソースが 100 秒未満で更新されると、更新が断続的に成功する場合があります。

SharePoint Unified Logging Service (ULS) ログには実際のエラーが表示されますが、原因に関しては意味のあるものには関係ないようです。

DateTime w3wp.exe (0x00000) 0x59D4 PowerPivot Service Data Refresh 99 High EXCEPTION: System.Net.WebException: The operation has timed out at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)

アプリケーション イベント ログに相関イベント (EventID: 5214) が表示される可能性があります。

同じソースからプルする複数のブックがあり、1 つのブックでデータ ソースの速度が低下している場合、他のクエリが待機するか遅くなる (100 を超える) 場合、複数のブックが失敗する可能性があります。

原因

この問題は、SharePoint 2016 で 1 つの PowerPivot データ ソースが 100 秒の更新期間に制限されるために発生します。

注:

100 秒以下でデータを更新する必要があると思われる場合は、データ ソースのパフォーマンスが低下またはパフォーマンス低下が原因で発生する可能性もあります。 クエリに時間がかかる複雑なデータ ソースから少量のデータをプルする場合は、タイムアウトを増やすことが最適なオプションではない可能性があるため、別の回避策を検討できます。

回避策

  1. より速く実行するようにクエリを最適化します。

  2. 少ないデータに対してクエリを実行します。

  3. データ ソースにハードウェアを追加して、クエリをより迅速に処理します。

  4. PowerShell を使用して、既定のタイムアウト設定を増やします。

    • SharePoint 2016 管理者が有効な PowerShell プロンプトで次のコマンドを実行し、[new_time_out_value] セクションを目的のタイムアウト値に変更します。

      $farm = Get-SPFarm
      
      #The time out value "new_time_out_value" is in milliseconds, so be very careful to not set it too low!!!
      
      $farm.Properties.Add("WopiProxyRequestTimeout", new_time_out_value);
      
      $farm.Update();
      
      #to double-check the setting (make sure it is of type Int32, otherwise you will need to remove the property an add it again
      
      $farm.Properties["WopiProxyRequestTimeout"].GetType()
      
    • 次のコマンドを実行して、将来別の値を設定するか、設定に問題がある場合に設定します。

      $farm = Get-SPFarm
      
      $farm.properties.Remove("WopiProxyRequestTimeout")
      
      $farm.Properties.Add("WopiProxyRequestTimeout", new_time_out_value);
      
      $farm.update()
      

注:

このタイムアウト値を自分のリスクで増やしてください。 新しい既定のタイムアウトは非常に低いことに気付く。 ただし、プルするデータの量と、そのデータをプルするのにかかる時間も認識する必要があります。 このタイムアウトを高く設定し、ユーザーが大量のデータをプルできるようにすると、PowerPivot、SharePoint、Office Online Serverのパフォーマンスの問題が発生する可能性があります。 また、SharePoint、SQL、および外部データ ソースの既定のタイムアウトによっても制限されます。 このタイムアウト値が必ずしも答えになるとは限りません。 プルするデータの種類に応じて、その他の回避策と最適化オプションがあります。