私が実行しているスクリプトのスニペット:
$reader = $managementgroupobj.GetMonitoringPerformanceDataReader()
while ($reader.Read()) // << Error in this line.
{
$perfData = $reader.GetMonitoringPerformanceData()
$valueReader = $perfData.GetValueReader($starttime,$endtime)
while ($valueReader.Read())
{
$perfValue = $valueReader.GetMonitoringPerformanceDataValue()
}
}
ここに、$managementgroupobj
class のインスタンスがありますManagementGroup
。
$starttime
同じスクリプトの最後の実行に応じて、との差は$endtime
15 分から 1 時間です。
スニペットは、パフォーマンス データを長期間にわたって正常に収集します。しかし、その後、どこからともなく次のエラーがスローされます。
「要求されたリーダーは有効ではありませんでした。リーダーが存在しないか、有効期限が切れています」
[ log_level=WARN pid=2716 ] Execute command 'get-scomallperfdata' failed. The requested reader was not valid. The reader either does not exist or has expired.
at GetSCOMPerformanceData, E:\perf\scom_command_loader.ps1: line 628
at run, E:\perf\scom_command_loader.ps1: line 591
at <ScriptBlock>, E:\perf\scom_command_loader.ps1: line 815
at <ScriptBlock>, <No file>: line 1
at <ScriptBlock>, <No file>: line 46
at Microsoft.EnterpriseManagement.Common.Internal.ServiceProxy.HandleFault(String methodName, Message message)
at Microsoft.EnterpriseManagement.Common.Internal.EntityObjectsServiceProxy.GetObjectsFromReader(Guid readerId, Int32 count)
at Microsoft.EnterpriseManagement.Common.DataReader.Read()
at CallSite.Target(Closure , CallSite , Object )
- 上記のエラーの原因は何ですか?
- PerformanceDataReader の仕組みを理解できれば幸いです。
ノート:
- エラーが発生する前に取得したデータの量は 100k+ でした。そのデータを取得するのにほぼ 1 時間かかりました。
- 可能性のある問題は、フェッチする必要があるデータの量にあったと思います.TimoutExceptionの一種である可能性があります.
- 上記の質問された両方の言及について、少なくともある程度の知識が得られれば幸いです。
ありがとう。