0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DLRS Too many SOQL query の考察

Posted at

自動化処理でToo many SOQL queryが出た場合、対象のオブジェクトに単にフローだけしか自動化処理がなければ、そのフローの中をチェックすれば済む。ループの中でSOQLを使ってないかなど...

しかし、Apexトリガーや他のフローが設定されているとややこしい。同じオブジェクトに対するすべての自動化処理でのSOQLの合算が影響してくるので、全てを見直さないと回避できないですね。

また、今回みたいに自動化処理とDLRSが関連すると少々お手上げです。

基本的には、この回答なんだろうと思う。

The best way is to split some or all into schedule mode. The tool does try to reuse queries between rollups, but with that number and likely variance in criteria (which prevents the query reuse from working effectively) its hard for its optimization to be completely successful in all honesty.

最良の方法は、一部またはすべてをスケジュール モードに分割することです。このツールはロールアップ間でクエリを再利用しようとしますが、その数と条件の差異 (クエリの再利用が効果的に機能しない可能性がある) を考えると、正直に言って、最適化を完全に成功させるのは困難です。

何でも、DLRSの最近のバージョンでは、このエラーを解決するための改善が行われているらしい

更新バージョン 2.19 : https://install.salesforce.org/products/dlrs/latest

このエラーが発生しないことを保証するものではありませんが、DLRS が原因である最も一般的な原因は解決されます。環境内に他の自動化がある場合でも、DLRS が何度も呼び出される可能性があります。

同じオブジェクトまたはそれより上位のオブジェクトで、起動している可能性のある他のオートメーションまたはロールアップはありますか? デバッグ ログを調べて、どのようなクエリが実行されているかを報告することができましたか? (管理パッケージの詳細は表示されませんが、実行されている SOQL クエリは表示できます)


提供された Apex デバッグ ログを確認し、Certinia (旧 FinancialForce) のこれまでにない素晴らしい Apex Log Analyzer を使用しています

自分でファイルを開いて確認することをお勧めします。

画像を添付しました。「今年の正しい収益予算に商談室を更新」と「来年の正しい収益予算に商談室を更新」が交互に繰り返されるパターンが確認できます。これらの実行のそれぞれで、「一致する収益予算の検索」が実行されているようです。これにより、それぞれの「update_child_lookup」が実行され、商談関連ルームの DLRS が起動されます。このサイクルを何度も繰り返します。

一般的に、私の疑いは、フローの構築と実行方法に関する何かが多くの「レコード更新」タイプのフロー アクションを引き起こし、それが DLRS を繰り返し起動させる原因になっているのではないかということです。これらのフローを一括実行することを検討すると、大きなメリットが得られますが、私の意見では、それが問題の根本原因になると考えられます。

DLRS は、単に一連の最初の失敗にすぎないようです。DLRS をアップグレードすると、この事実が改善されると確信していますが、ログに見られるパターンは、フローの動作を変更しないと問題が発生することを示しています。

image.png

新しいバージョンのDLRSでも発生するとのこと。

これは、複数のレコード処理の結果として発生しているようです。これはバッチデータの変更中または何らかの種類で発生しているのでしょうか?

バッチサイズの削減を検討してください。

一度にいくつかの更新を行っています。すべての変更を収集し、最終的に変更をデータベースに一度に送信するには、そのフローを最適化する必要があります。

Salesforce では、あなたが行っていることを「ループ内の DML」と呼んでおり、このトピックを研究することで、この問題を解決するのに十分な洞察が得られる可能性があります。

この問題を解決するために契約できるコンサルタントや経験豊富な友人に連絡できますか? 残念ながら、単に「いくつかの変更を加える」以上のことを期待しているのではないかと思います。これを解決する正しい方法を理解するには、プロセスを理解し、いくつかの代替案をテストするのに時間を費やす必要があるでしょう。

それでも、これがバッチ作業の結果として発生している場合は、バッチの速度を下げることが問題を隠す最も簡単な方法である可能性があります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?