Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

インポートデータ削除時の速度が遅い

MarikoI
Tera Contributor
インポートしたCSVデータを削除する際の時間が長すぎて困っています。 例えばCaseテーブルを継承したテーブルに対して(150カラム、108インデックス)、 5万データのインポートは【約10分】ですが、 5万データ削除は【約5時間】かかります。 Caseテーブルを継承することを前提に、削除時間を速くするには どのような方法がありますか? ヒントをいただけますと幸いです。 (↓以下のようにソースの書き方として、whileで回して削除するか、一括で削除するか試しましたが、 削除時間に大きな差はありませんでした。     var gr = new GlideRecord('x_u200');     // gr.query();     // while (gr.next()) {     //  gr.deleteRecord();     // }     gr.deleteMultiple(); また、インデックスの多さが処理速度に関わっていると思われますが、 インデックスは手を加えられない前提です。)
1件の返信1

iwai
Giga Sage

以下の記事が参考になると思います。JavaScriptについても少々記載があります。gr.setWorkflow(false); にするとBusinessRuleが実行されない分、結構早くなります(Reference項目による依存関係がありカスケード削除が発生する場合はsetWorkflowが無効になる)。ScheduleJobで非同期の分散削除をするともう少し早くなることもあります。
一括削除と過剰データ管理に関する推奨事項 - Support and Troubleshooting (servicenow.com)

  • Description
    • テーブルからデータを一括削除することが望ましい、または必要な場合があります。この削除は、事前定義された一連の条件で実行するか、または単にテーブルをきれいにワイプすることができます。破損したデータやアクセスできないデータを除いて、状況に関係なく、ニーズに合った削除方法があります。この記事で概説するデータ削除方法は、最も単純なアプローチから最も高度なアプローチの順に並べられています。

      1.UI アクション
      2.除外ルールをクローン
      3.テーブルのクリーンアップポリシー
      4.JavaScript
      最適なアプローチの決定はケースバイケースで異なり、特定の状況で最適なオプションを決定するのはあなた次第です。大量のレコードの場合、クローン除外ルール以外の高速オプションはありませんが、これらは状況に適していない可能性があります。テーブルから数百万件のレコードを削除するビジネスクリティカルな場合で、この記事のメソッドに必要な時間を待つことができない場合は、ServiceNow でケースをオープンしてテクニカルサポートエンジニアに相談できます。