Share via


カスケード トランザクションの非同期処理

特定のトランザクションは、すべての関連するレコードに伝播するように構成できます。 これは、親レコードの変更は、すべての子レコードで処理 (伝播) されます。 カスケード リレーションシップは、テーブル レベルで構成されます。 伝播関係の詳細については、動作を伝搬するテーブルのリレーションシップを構成する を参照してください。

同期モード vs 非同期モード

既定では、カスケード操作は同期トランザクションとして実行されます。 同期カスケード トランザクションでは、影響を受けたすべてのレコードが、システムによって検出されます。 レコードが処理されると、システムによってロックされます。 すべての変更が完了すると、レコードのロックが解除され、トランザクションが完了します。

多数のレコードを持つ同期トランザクションは、サーバー タイムアウトが原因で、長時間実行トランザクションが失敗する環境に対してパフォーマンスの問題を引き起こすことがあります。 レコードはロックされ、同じレコードを操作する他の業務やユーザー トランザクションは実行ができなくなります。 また、長時間実行トランザクションでは、保留状態のトランザクションや要求のバックログが発生し、システム パフォーマンスが低下し、作業が停止する可能性があります。

同期カスケード操作が進行中に、環境でタイムアウトが発生したり、パフォーマンスが低下した場合は、環境は非同期モードを有効にするとメリットがあります。 モード間の主な相違点は、この次のテーブルに示されています。

同期モード 非同期モード
カスケード操作が完了するまで、そのほかの業務は、(直接またはカスケード) 選択したレコードのセット全体を実行することができません。 割り当てと削除、統合の場合、カスケード変更がバッチ処理され、バッチ内で処理されているレコードのみがロックされます。 これにより、完全なカスケード変更操作中にほかの業務を実行できます。
ジョブが完了すると、すべてのデータに新たに必要とされる値が表示されます。 ジョブの実行時に、完了した各バッチには必要とされる値が表示されます。 これは、フル操作が完了するまで、一部のデータが必要な値を示し、一部のデータが元の値を示す場合があることを意味します。 これは 「結果整合性」 と呼ばれます。
単一レコードが失敗した場合は、すべてのデータは、元の値にロール バックされます。 ロールバック処理では、完了したすべてのレコードの再編集が必要となるため、さらに時間がかかります。 単一ジョブが失敗した場合は、完了を試みるために複数回再試行されます。 ジョブが完了できない場合、失敗は、システム ジョブ 領域に記録されます。 正常に完了したレコードが新しい値のままであることに注意してください。
カスケード一覧のレコードの 1 つが、予想と異なる値である場合、ジョブが失敗し、ロールバックします。 たとえば、開始レコードは 所有者 1 に属し、カスケード操作では、 所有者 2 に変更する必要があると仮定します。 ロックが発生する前に、ダウンストリーム関連レコードの 1 つが 所有者 3 に変更されたか、または削除された場合、ジョブ全体がロールバックします。 割り当ては、親子関係に基づいて新しい値に現在の値を変更する上書きモードで常に動作します。 元の値の不一致によるジョブの失敗はありません。 セットの一部として予期されていたレコードが欠落している場合の削除では、エラー ポイントまでのすべてのレコードは完了したと見なされます。 ユーザーまたは管理者は、失敗したジョブを再実行できます。これにより、ジョブが再計算され、レコードが失われることなく続行されます。 統合の場合、欠落レコードに関する問題がある場合、ジョブは再試行され、欠落レコードなしで実行されます。

非同期モードとプラグイン

カスケード トランザクションが含まれるレコードのしきい値を満たし、レコードに関連付けられたプラグインがない場合、レコードは非同期で処理されます。

操作 Threshold
Assign 1,000 レコード
Delete 10,000 レコード
マージ 1,000 レコード

非同期バッチ内のレコードにプラグインが割り当てられている場合、そのレコードに関連付けられているすべてのプラグインとともに、単一のレコードの更新または削除が同期的に実行されます。 これは、非同期バッチで次のレコードに移動する前に、トランザクションの一部として発生します。

非同期トランザクション内のプラグインが新しいカスケード削除または割り当てをトリガする場合、新しいカスケード トランザクションは常に現在の非同期トランザクション内で同期的に実行されます。 これによって、非同期トランザクションが複数の階層を保持すること予防することができます。

非同期処理の進行状況をトラッキング

管理者は、 設定 領域で非同期処理の進行状況を監視できます。

  1. Power Platform 管理センター にサインインします。

  2. ナビゲーション エリアの 環境 を選択します。 続いて対象の環境を選択します。

  3. 設定を選択し、監査とログを展開し、システム ジョブを選択します。

  4. カスケード操作は、システム ジョブ ビューに表示されます。

    カスケード操作ビュー。

    カスケード操作のみを表示するには、 ビュー セレクターで カスケード操作 を選択してください。

    カスケード操作ビュー セレクター。

カスケード操作には、次のいずれかの状態があります:

  • 完了: カスケード トランザクションのすべてのバッチを正常に完了しました。
  • 進行中: カスケードの変更は、処理中です。
  • 失敗: 複数回再試行した後、カスケード変更の一部が失敗しました。

Note

非同期カスケード ジョブをキャンセルすることはできません。 完了 または 失敗 の状態を表示するまで、完了を待つ必要があります。

カスケード操作を開始すると、次のように表示されます:

  • 特定のトランザクションで発生した再試行の回数。

  • 作成および完了日時。

  • ジョブ作成者。

  • 失敗の理由や例外など、ジョブに関連するメッセージ。

    カスケード操作レコード。

どのカスケード トランザクションが非同期的に処理できますか?

カスケードトランザクションの割り当て、削除、およびマージは、非同期で処理できます。

Note

共有/共有解除、ロールアップ ビュー、再ペアレントなど、他のトランザクションは現在、非同期処理について確認中です。

非同期カスケード操作に関する問題のトラブルシューティング

同期カスケード ジョブが失敗すると、すべての変更が停止し、ロールバックされるため、どのレコードに対しても要求された変更は実施されません。 これは時間のかかるプロセスになる可能性があります。ロールバックは最初の試行と同じほど長くかかる可能性があり、操作の再試行は最初のレコードから再開されるためです。

障害が発生した場合、非同期操作は何度も再試行します。 ほとんどの場合、ジョブを再試行すると成功し、ジョブは続行して完了します。 また、再試行しても問題が解決しない場合があります。 これが発生すると、非同期ジョブが一時停止します。管理者とユーザーは問題のトラブルシューティングを行い、停止した時点からジョブを再開できます。

カスケード操作の失敗の一般的な原因

以下は、カスケード操作の処理に失敗する一般的な理由です。

  • プラグインの例外
  • セキュリティの例外

プラグインの例外

プラグインはカスケード操作の処理に追加され、レコードに変更が加えられたときに、メールを送信したり、他のレコードに別の更新をトリガーしたりするなどの特定のアクションを実行します。 これらは、サードパーティによって提供されるか、社内で開発される場合があります。 プラグインが例外を発生させた場合、カスケード操作は失敗します。 例外の理由によっては、再試行すると問題が解決する場合があります。 失敗のために非同期カスケード ジョブが一時停止した場合は、操作に関連付けられているすべてのプラグインを検証して、例外を発生させていないことを確認します。 修正すると、ジョブを再開できます。

セキュリティの例外

セキュリティの例外は、カスケード操作を実行したユーザーが 1 つかそれ以上のレコードに変更を加えるのに十分な権限を持っていない場合、またはユーザーが無効になっているか、システムから削除された場合に発生します。

ユーザーがまだシステムに存在する場合は、レコードを変更するために必要な権限を持っていること、および指定されたアクションを実行するためのアクセス許可を持っていることを確認します。 問題が解決した後は、ジョブを再開します。

ユーザーが無効にされているか、システムから削除されている場合は、ユーザーを再び有効にするか、再び追加すると問題が解決し、ジョブを再開できます。 ただし、ユーザーを削除または無効にする必要がある場合や、アクションまたはレコードのアクセス許可を持たない場合は、ジョブをキャンセルして、適切なアクセス許可を持つユーザーで再開する必要があります。

失敗したジョブに関するその他の問題については、Microsoft サポートにお問い合わせください。 詳細: サポートの概要

カスケード マージ中のファイル削除の問題のトラブルシューティング

ジョブの実行中にファイルが削除されたためにカスケード マージ操作でエラーが発生した場合は、親子関係チェックをスキップできます。 これにより、ジョブがバックグラウンドで実行されているときにユーザーがセットからレコードを削除した場合でも、マージを続行できます。 レコードのマージを選択するときに、マージ ウィンドウの下部にあるオプション 親子関係チェックは既定で有効になっています。親子関係チェックを無視するにはこれをオフにします をオフにします。

レコードの統合ダイアログ ボックス。

レコードのマージの例

注文と関係のある連絡先に関連したアカウントがあると想定します。 2 つのアカウント レコードをマージしたいとします。

ジョブが正常に実行されると、マージにより、関連するすべての連絡先とその注文がターゲット アカウントに割り当てられます。

レコードのマージ プロセス中に、別のユーザーが、関連する取引先担当者を削除してしまうが、取引先担当者に関連する注文レコードがまだ存在する場合、子レコードの親が欠落しているため、マージ ジョブは失敗します。 レコードのマージ中に親子関係チェックをスキップすることを選択する場合、取引先担当者レコードが欠落している注文は、ターゲットの取引先企業レコードにマージされます。 ただし、関連する連絡先レコードはターゲット アカウントに割り当てられることなくジョブは完了します。

他のアクセス変更を防ぐロックを引き起こすマージ

カスケード マージ操作は、従属テーブルの新しい所有者へのアクセスを許可します。 これを行うために、カスケード マージ操作は、ロックを必要とするプリンシパル オブジェクト テーブルにアクセスして変更を加えます。 マージ操作に (カスケード関係に基づいて) 多くのレコードが含まれている場合、このロックは長期間にわたって適用される可能性があります。 マージの実行中に操作が無関係のレコードへのアクセスを許可/取り消そうとすると、エラーが発生する可能性があります。 そのような場合には、ブロックを減らすことができるように、営業時間外にマージを実行してみてください。

参照

テーブルの関連付けの概要