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

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 でケースをオープンしてテクニカルサポートエンジニアに相談できます。