スクリプトの処理時間短縮について

Yuki21
Tera Expert

お世話になっております。
以下のQAでご教示いただいた方法でテーブルに添付されたCSVファイルをテーブルへ取り込むスクリプト実行に関して、
大量のレコードを含むCSVファイルを処理するケースの処理時間短縮が検討事項として挙がっております。
※約50万件のデータ取込みに45分程かかっています

スクリプトを使わない方法で処理時間短縮が見込める方法はあるのでしょうか?

変換マップの使用については、結局CSV→テーブルのインポートが必要になり、他のマスタテーブル参照が必要になることで難しいと判断しています。

<参考QA>
https://community.servicenow.com/community?id=community_question&sys_id=90b968971bb04550cdd555fa234b...

1 ACCEPTED SOLUTION

ScriptAction は 並列には実行されないと思っています。並列処理できるか試してみてください。ひとつ処理が終わるまで次のScriptActionは実行されないかと思います。
 
簡単な並列化のScriptは ScheduleOnce を使うことです。これは使い捨てのScheduleJobを作成できます。公式Docsは無いですがScript include にあります、検索してみてください。
参考Script
function script(){
    //ScheduleJob
    gs.info('Test OK');
} 
var sched = new ScheduleOnce();
sched.script = '('+script+')();';
sched.schedule();

ScheduleJobをScript includeに保存する話が別でありますが、そうするべき重要な理由があります。
ScheduleJobはUpdateSetに保存されません。これでは開発運用上問題があります。そのためUpdateSetに保存されるScript includeにほぼすべてのScriptを記載して、ScheduleJobは呼び出すだけにするのが開発の運用上、良い方法です。ScheduleJobはXMLファイルで適用するか強制的にUpdateSetに記録する。

Performanceの話も出てますが、今回のケースではほぼ気にならない程度のはずです。50万件をScheduleJobで処理しているときも、動作速度は変わらなかったはずです。その程度のScheduleJobがひとつあるだけなら体感的な影響はほぼなしです。注意しなければならないのは、ScheduleJobの同時に処理できる数は少ないことと、長時間占有すると、順番待ちしているScheduleJobが実行できないだけでなく、順番が来てもとっくに開始時間が過ぎていているため開始しないことがあります。そのためScheduleJobの大量作成と長時間占有には注意して制御するべきです。結果的に夜間に実行することが多いですが夜間に多くのScheduleJobの滞留が発生すると処理できない場合があります。

これら難しい処理を、ServiceNowの知識が乏しい時には、挑戦しない方が良いです。自分の力量を大きく上回る実装は見送る事も大切な事です。出来る範囲でシステムを使って、仕組みがわかってから改良していくことが良いです。良くわからない謎の技術で動いているScriptが完成しても、それは制御できない非常に危険なシステムです。それと自分しかわからない特殊なScriptも危険です。無理しないことが安全です。

View solution in original post

20 REPLIES 20

Hitoshi Ozawa
Giga Sage
Giga Sage

CSVファイルを分割して平行でインポートすると時間を短縮することはできます。その場合はインスタンスのCPUとメモリを監視して余裕があることを確認します。

また、以前にも書きましたようにcsvファイル用jdbcドライバのツールも製品やオープンソースで色々とあります。その他にもDBにCSVをインポートしてJDBCデータセットとして使うこともできます。インメモリ・データベースを使うことも検討できます。

例:(次の製品はただGoogleした結果で私は利用したことがありません)

https://www.cdata.com/jp/drivers/csv/jdbc/

https://ja.osdn.net/projects/sfnet_csvjdbc/

https://github.com/jprante/jdbc-driver-csv

インポートセットを利用する場合でも平行インポートすることができます。

https://docs.servicenow.com/bundle/rome-platform-administration/page/administer/import-sets/concept/...

すみません、以下の確認方法についてご教示いただけないでしょうか?
「システム診断」>「統計」>「統計」でしょうか?

CSVファイルを分割して平行でインポートすると時間を短縮することはできます。その場合はインスタンスのCPUとメモリを監視して余裕があることを確認します。

はい。ナビゲータに「stats.do」を入力しても表示されます。

それと「ServiceNowパフォーマンス」ページです。

  1. 左上の「Servicenow」ロゴをクリック
  2. 上のドロップダウンリストから「ServiceNowパフォーマンス」を選択

find_real_file.png