Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JJUG CCC 2025 Fall バッチ性能!!劇的ビフォーアフター

JJUG CCC 2025 Fall バッチ性能!!劇的ビフォーアフター

JJUG CCC 2025 Fall
https://ccc2025fall.java-users.jp/

#jjug_ccc #jjug_ccc_c

野村総合研究所(NRI)は「コンサルティング」「金融ITソリューション」「産業ITソリューション」「IT基盤サービス」の4事業を通じて、国内外の企業・行政の活動や、社会・暮らしを支えています。
今回のセッションではバッチアプリケーションの性能についてお話します。

Avatar for HayashiYuichiro

HayashiYuichiro

November 15, 2025
Tweet

More Decks by HayashiYuichiro

Other Decks in Technology

Transcript

  1. 1 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチアプリケーションの性能 02 性能検証モデル 03 性能検証結果 04 01 野村総合研究所とxPaletteについて イベントのお知らせ 05
  2. 2 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    野村総合研究所とxPaletteについて 01
  3. 3 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    野村総合研究所 野村総合研究所とxPaletteについて 1965年創業、今年で創業60周年を迎えました。 NRIでは4つの事業を通して、社会の仕組みづくり、顧客のビジネス、人々の快適な暮らしを支えています。 マネジメントとシステム分野において あらゆる産業のコンサルティング コンサルティング 産業分野でのシステム開発や ソリューションを提供 産業ITソリューション 企業のIT基盤の構想・設計・構築・ 運用などのサービスやソリューションを提供 IT基盤サービス 金融分野でのシステム開発や ソリューションを提供 金融ITソリューション
  4. 4 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    生産革新センター 野村総合研究所について 主な事業内容 生産革新センターはテクニカル領域に特化した組織です。 アプリケーション開発の生産性向上のためのソリューション提供、お客様のDXの実現を支援するサービスの提供を行っています。 フレームワークの開発や技術支援 独自フレームワークの開発や最新技 術の検証、実開発案件への技術 支援などを行っております。 AIを活用した新たな開発手法確立 フレームワーク開発や技術支援で得 られたノウハウを基に、AIを利用した 開発プロセスや開発手法を確立し ソフトウェア開発現場における開発 スタイルの変革を目標として活動し ています。 顧客業務のAI活用支援 画像解析や音声認識などの技術 を背景に、お客様の業務改革を目 的とした業務特化型のAI開発や、 最新技術動向の調査やR&Dなど を行っています。
  5. 5 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    開発コミュニティ活動(xPalette) 野村総合研究所について xPalette(クロスパレット)とは?
  6. 6 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    xPaletteが提供するモノ 開発コミュニティ活動 ガイドライン ライブラリ サンプル/テンプレート Prj 開発手順や方式の説明 開発に利用可能な部品群 開発の雛形/実装例 各処理方式についての設計考慮 事項を記載。設計ガイドラインの内 容に沿ってアプリケーションを実装す る際の実装方式や実装例を参照 することで高品質なアプリケーション 開発が可能となる。 ガイドラインに記載した部品をライブ ラリとして提供。テンプレートプロジェ クトに組み込むことで素早いアプリ ケーション開発が可能となる。 ガイドラインに記載した実装例を実 際に動くサンプルコードとして提供。 テンプレートは開発開始時にプロ ジェクトの雛形として利用する。
  7. 7 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    開発コミュニティ活動(xPalette)の構想 開発コミュニティ活動 (開発ベースライン) フィードバック 社外のエンジニア/企業 NRIのお客様 開発/エンハンス xPalette開発コミュニティ 社内開発PJ 公開/利用 プロダクト開発 公開/利用 フィードバック 構想
  8. 8 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    xPaletteの活動領域 開発コミュニティ活動 バックエンド領域 アプリ実行基盤領域 フロントエンド領域 アプリケーションレイヤー インフラレイヤー APP
  9. 9 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バックエンド領域の活動 開発コミュニティ活動 バッチアプリケーション オンラインアプリケーション 非同期アプリケーション バックエンド領域では「バッチ」「オンライン」「非同期」の3軸で活動中 特定の時刻やイベントで起動し、 特定の処理を実行する アプリケーション クライアントからのリクエストに 応じた処理を実行し、 即時に処理結果を応答する アプリケーション 処理要求に対して、 処理結果を即時に応答せず、 別のサーバーで処理を実行する アプリケーション
  10. 10 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バックエンド領域の活動 開発コミュニティ活動 バッチアプリケーション オンラインアプリケーション 非同期アプリケーション バックエンド領域では「バッチ」「オンライン」「非同期」の3軸で活動中 特定の時刻やイベントで起動し、 特定の処理を実行する アプリケーション クライアントからのリクエストに 応じた処理を実行し、 即時に処理結果を応答する アプリケーション 処理要求に対して、 処理結果を即時に応答せず、 別のサーバーで処理を実行する アプリケーション 本日は JJUG CCC 2024 Fall の続きとして、 バッチアプリケーション向けの取り組み事例について話します
  11. 12 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチアプリケーションにおける重要な設計観点 バッチアプリケーションの性能 バッチアプリケーションで重要な設計観点は下記の2点です 性能効率性 バッチアプリケーションにおける目的の1つは大量 のデータを処理することです。そのため、処理対 象のデータ量を想定時間内に処理しきる必要 があります。 信頼性 大量のデータ処理中に異常が発生した場合、 データの整合性が崩れる可能性があります。そ のため、異常発生におけるデータ整合性を保つ ための仕組みやリカバリ運用の単純化といった 考慮が必要となります。 本日は「性能効率性」をメインテーマとしてお話します!!
  12. 13 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチアプリケーションの性能に関わる主な設計ポイント バッチアプリケーションの性能 設計ポイントはわかったが、どのポイントをどれだけいじれば性能が変わるのか? 具体的な性能差が知りたいが・・・ ログ出力量 大量のログを出力する場合、ロ グ出力のIOが多発するため処理 性能が低下する。 設計ポイント① コミット方式 データベースやファイルへのデータ 出力(コミット処理)単位を変更 することで処理性能が変化する。 設計ポイント② ジョブの多重化 ジョブの処理を多重化することで、 大量のデータを効率的に処理す ることができるため処理性能が向 上する。 設計ポイント③
  13. 14 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    バッチアプリケーションの性能に関わる主な設計ポイント バッチアプリケーションの性能 実際のジョブに対して各設計ポイントの設定を変更して処理時間を計測し、 設計ポイントごとの性能ベンチマークを測定しました!! ログ出力量 大量のログを出力する場合、ロ グ出力のIOが多発するため処理 性能が低下する。 設計ポイント① コミット方式 データベースやファイルへのデータ 出力(コミット処理)単位を変更 することで処理性能が変化する。 設計ポイント② ジョブの多重化 ジョブの処理を多重化することで、 大量のデータを効率的に処理す ることができるため処理性能が向 上する。 設計ポイント③
  14. 16 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    性能検証の背景と目的 性能検証 大量のデータを扱うバッチアプリケーションにおいて、 コミット方法などの処理方式の差が性能にどの程度影響するのか指標がなかった 性能検証の背景 実案件相当のデータベースとバッチジョブを用いて 性能検証を行います。 データ バッチ 実際に測定をして、 バッチアプリケーション開発における性能チューニングの指標として利用! 性能検証の目的
  15. 17 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    データ – TPCモデル 性能検証モデル データベースのトランザクション性能検証を目的に作成されたベンチマーク TPC-C 小売業の注文処理及び在庫管理シナリオを模倣。 TPC-H 製造業や流通業などの一般的なビジネスシナリオを模倣。 TPC-E 証券口座の管理、株式の取引、投資家のアクティビティ を模倣。 TPC-DS 小売業などのさまざまな業界のビジネス分析シナリオを 模倣。 Oracle DatabaseやMicrosoft SQL Server、IBM Db2などにおいて、 処理能力(スループット)、応答速度、スケーラビリティの測定に使用されてます。
  16. 18 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    データ – TPCモデル 性能検証モデル データベースのトランザクション性能検証を目的に作成されたベンチマーク TPC-C 小売業の注文処理及び在庫管理シナリオを模倣。 TPC-H 製造業や流通業などの一般的なビジネスシナリオを模倣。 TPC-E 証券口座の管理、株式の取引、投資家のアクティビティ を模倣。 TPC-DS 小売業などのさまざまな業界のビジネス分析シナリオを 模倣。 Oracle DatabaseやMicrosoft SQL Server、IBM Db2などにおいて、 処理能力(スループット)、応答速度、スケーラビリティの測定に使用されてます。
  17. 19 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    TPC-Hモデル 性能検証モデル ※スケールファクタによりデータ量を任意に調整可能 テーブル名 概要 データ量(件) CUSTOMER 顧客情報 150万 ORDERS 受注情報 1,500万 LINEITEM 注文の明細情報 6,000万 PART 製品情報 200万 SUPPLIER 供給者情報 10万 PARTSUPP 製品と供給者の 関係情報 800万 NATION 国情報 25 REGION 地域情報 5 製造業や流通業、その他一般的なビジネスシナリオを模倣したベンチマーク
  18. 20 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    顧客注文金額集計ジョブ 性能検証モデル 指定された年月における顧客ごとの注文金額を集計し、注文金額集計テーブルに登録するジョブ 出力テーブル 入力テーブル UPDATE 顧客あたりn件 顧客注文金額 集計ジョブ INSERT 顧客あたり1件
  19. 21 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ジョブフロー 性能検証モデル CUSTOMER ① 顧客情報取得 ② 注文情報取得 ジョブ開始 パラメータ取得 ③ 注文金額算出 ④ ステータス更新 ⑤ テーブル登録 ジョブ終了 ORDERS ORDERS ORDER_PRICE_SUMMARY 金額を算出したデータの ステータスを集計済みに更新 集計結果をテーブルに登録 全顧客分 繰り返し すべての顧客情報を取得 顧客ごとの注文情報を取得
  20. 22 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    実行環境 性能検証モデル ※バッチ実装方法の詳細はこちらをご参考下さい。 ボリュームタイプ インスタンスタイプ t3.medium マグネティック JJUG CCC 2024 Fallの資料 バッチサーバ データベースサーバ ログ保存 TPC-Hを構築 バッチはSpring Bootをベースとしたフレームワークを採用し、データベースはMySQLを使用
  21. 23 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    設計ポイントごとのベンチマーク測定 性能検証モデル 同一ジョブに対して設計ポイントごとに実行時間を比較 ログ出力量 ログ出力の有無で性能を比較 • ログ出力あり • ログ出力なし 設計ポイント① コミット方式 コミット方式/コミット間隔の違い による性能を比較 • 逐次コミット • 一括コミット • 中間コミット 設計ポイント② ジョブの多重化 ジョブを多重化した場合の性能 を比較 • 多重化あり • 多重化なし 設計ポイント③
  22. 25 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ベンチマーク測定:ログ出力量 性能検証結果 顧客注文金額集計ジョブに対して、 ログ出力ありの場合とログ出力なしの場合の処理時間を比較 ログ出力量 ログ出力の有無で性能を比較 • ログ出力あり • ログ出力なし 設計ポイント① コミット方式 コミット方式/コミット間隔の違い による性能を比較 • 逐次コミット • 一括コミット • 中間コミット 設計ポイント② ジョブの多重化 ジョブを多重化した場合の性能 を比較 • 多重化あり • 多重化なし 設計ポイント③
  23. 26 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ログ出力量 性能検証結果 ログ出力あり ログ出力なし ログレベル:INFO ログバイト数:1,178バイト ログレベル:INFO,DEBUG ログバイト数:4,393,713,140バイト ①顧客情報取得 ②注文情報取得 ジョブ開始 パラメータ取得 ③注文金額算出 ④ステータス更新 ⑤テーブル登録 ジョブ終了 ログ出力あり ログ出力なし 全顧客分 繰り返し 2025/09/26 01:48:47 INFO [vm01] [main] [job:order-price-summary-once-commit] [id:order-price-summary-once-commit-20250926-014842] j.c.n.x.e.b.j.o.OrderPriceSummaryOnceCommitJob - === 顧客注文金額集計ジョブ(一括コミット)開始 === 対象年月:1995年5月 2025/09/26 02:32:19 INFO [vm01] [main] [job:order-price-summary-once-commit] [id:order-price-summary-once-commit-20250926-014842] j.c.n.x.e.b.j.o.OrderPriceSummaryOnceCommitJob - === 顧客注文金額集計ジョブ(一括コミット)正常終了 === 対象年月: 1995年5月 2025/09/26 02:32:19 INFO [vm01] [main] [job:order-price-summary-once-commit] [id:order-price-summary-once-commit-20250926-014842] j.c.n.x.example.batch.common.runner.JobRunner - job finished, total execution time 2612.876627073s, result=SUCCESS, exit-code=0. 2025/10/02 05:20:51 INFO [vm01] [main] [job:order-price-summary-once-commit] [id:order-price-summary-once-commit-20251002-052046] j.c.n.x.e.b.j.o.OrderPriceSummaryOnceCommitJob - === 顧客注文金額集計ジョブ(一括コミット)開始 === 対象年月:1995年5月 2025/10/02 05:20:51 DEBUG [vm01] [main] [job:order-price-summary-once-commit] [id:order-price-summary-once-commit-20251002-052046] j.c.n.x.e.b.j.o.OrderPriceSummaryOnceCommitJob - 顧客情報の取得開始 2025/10/02 05:20:51 DEBUG [vm01] [main] [job:order-price-summary-once-commit] [id:order-price-summary-once-commit-20251002-052046] j.c.n.x.e.b.j.m.C.selectAllCustomers - ==> Preparing: SELECT C_CUSTKEY, C_NAME, C_ADDRESS, C_NATIONKEY, C_PHONE, C_ACCTBAL, C_MKTSEGMENT, C_COMMENT FROM CUSTOMER ORDER BY C_CUSTKEY 2025/10/02 05:20:51 DEBUG [vm01] [main] [job:order-price-summary-once-commit] [id:order-price-summary-once-commit-20251002-052046] j.c.n.x.e.b.j.m.C.selectAllCustomers - ==> Parameters: 2025/10/02 05:21:13 DEBUG [vm01] [main] [job:order-price-summary-once-commit] [id:order-price-summary-once-commit-20251002-052046] j.c.n.x.e.b.j.o.OrderPriceSummaryOnceCommitJob - 顧客情報取得: ID=1, 名前=Customer#000000001 …
  24. 27 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ログ出力量による処理時間比較 性能検証結果 10 20 30 40 50 処 理 時 間 (分) ログあり ログなし 50分37秒 47分13秒 ※一括コミット方式を採用
  25. 28 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ログ出力量による処理時間比較 性能検証結果 10 20 30 40 50 処 理 時 間 (分) ログあり ログなし 50分37秒 47分13秒 ※一括コミット方式を採用 ログ出力をなくすことで約3分ほど時間が短縮
  26. 29 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ログ出力のボトルネック 性能検証結果 大量のログ出力処理による処理性能低下 ① バッチ処理中に大量のログを出力すると、ログの書き込みのI/O処理がボトルネックとなり、 全体の処理性能が大幅に低下する可能性があります。特に大規模データを処理する場合 ログ出力の有無が処理時間に大きく影響します。 ログ出力先のストレージの圧迫 ② 機械的なログ出力により、ストレージ容量が急速に消費されます。 これにより、ストレージコストの増加だけでなく、ディスク容量不足によるジョブの異常停止と いった深刻な問題が発生する可能性があります。 処理時間の増加 I/Oボトルネック スループット低下 ストレージコスト増 ディスク容量不足 ジョブ異常停止
  27. 30 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ログ出力の検討 性能検証結果 ① 大量のログ出力処理による処理性能低下 ② ログ出力先のストレージの圧迫 デメリット メリット ① エラー/障害発生時の調査が容易になる ② 処理状況の把握が可能になる ログをどの程度削減するかは業務処理の重要性を 考慮して検討することが大切
  28. 31 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ベンチマーク測定:コミット方式 性能検証結果 顧客注文金額集計ジョブに対して、 逐次コミット、一括コミット、中間コミットを採用した場合の処理時間を比較 ログ出力量 ログ出力の有無で性能を比較 • ログ出力あり • ログ出力なし 設計ポイント① コミット方式 コミット方式/コミット間隔の違い による性能を比較 • 逐次コミット • 一括コミット • 中間コミット 設計ポイント② ジョブの多重化 ジョブを多重化した場合の性能 を比較 • 多重化あり • 多重化なし 設計ポイント③
  29. 32 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コミット方式の違い 性能検証結果 一括コミット 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 全データ(150万件)を まとめてDBに反映 業務処理 全150万件 次のデータを 処理 ジョブ全体の処理が完了した後、 すべてのデータ変更をまとめて一度だけ コミットする方式 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 業務処理 全150万件 次のデータ を処理 処理の途中に一定単位で区切り、 複数回に分けてコミットする方式 コミット間隔 コミット間隔(n件)ごと にまとめてDBに反映 全件処理する まで繰り返し 中間コミット 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 業務処理 全150万件 次のデータを 処理 1件ごとDBに反映 個々の処理やレコードごとに随時 コミットを行う方式 逐次コミット
  30. 33 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コミット方式の違い 性能検証結果 一括コミット 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 全データ(150万件)を まとめてDBに反映 業務処理 全150万件 次のデータを 処理 ジョブ全体の処理が完了した後、 すべてのデータ変更をまとめて一度だけ コミットする方式 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 業務処理 全150万件 次のデータ を処理 処理の途中に一定単位で区切り、 複数回に分けてコミットする方式 コミット間隔 コミット間隔(n件)ごと にまとめてDBに反映 全件処理する まで繰り返し 中間コミット 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 業務処理 全150万件 次のデータを 処理 1件ごとDBに反映 個々の処理やレコードごとに随時 コミットを行う方式 逐次コミット コミット回数:150万回 コミット回数:1回 コミット回数:150万件/n回
  31. 34 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コミット単位による処理時間比較 性能検証結果 10 20 30 40 処 理 時 間 (分) 逐次コミット (コミット回数:150万回) 7時間41分 50 中間コミット (コミット回数:15回) 37分19秒 一括コミット (コミット回数:1回) 47分13秒 ※中間コミットのコミット間隔は10万件
  32. 35 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コミット単位による処理時間比較 性能検証結果 10 20 30 40 処 理 時 間 (分) 7時間41分 50 37分19秒 47分13秒 中間コミットの処理時間が最も短い 逐次コミット (コミット回数:150万回) 中間コミット (コミット回数:15回) 一括コミット (コミット回数:1回) ※中間コミットのコミット間隔は10万件
  33. 36 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    逐次コミット > 一括コミット > 中間コミット 処理時間 ※検証では、MybatisのSqlSessionTemplateを使用 (コミット=DBへのデータ転送/書き込み) ⚫ 逐次コミット:コミット処理のオーバヘッドが大きい ⚫ 一括コミット:未コミットログが肥大化するため性能を圧迫 ⚫ 中間コミット:適切な粒度でコミットすることで、DBの未コミットログを肥大化させることなく、 逐次コミットのオーバヘッドも低減 (コミット回数:150万回) (コミット回数:1回) (コミット回数:15回) コミット単位による処理時間変動の考察 性能検証結果
  34. 37 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コミット方式のメリット・デメリット 性能検証結果 一括コミット 中間コミット 逐次コミット メリット ⚫コミット済みのデータは永続化される ため、エラーの影響が局所化される ⚫外部システムのデータを更新する処 理においてはデータの一貫性を担保 しやすい デメリット ⚫データベース書き込みのたびにコミット するため、処理が遅くなる メリット ⚫コミット回数が少なくなるため負荷分 散が可能 ⚫コミット済みのデータは永続化される ため、エラーの影響が局所化される デメリット ⚫リカバリ処理が複雑になる可能性が ある メリット デメリット ⚫エラー発生時にすべての処理がロール バックされるためジョブ実行がなかっ たことにできる ⚫大量件数処理時に高負荷になる可 能性がある ⚫エラー発生時のリランでは、処理を最 初からやり直すためリカバリ運用に時 間がかかる
  35. 38 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コミット方式の違い 性能検証結果 一括コミット 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 全データ(150万件)を まとめてDBに反映 業務処理 全150万件 次のデータを 処理 ジョブ全体の処理が完了した後、 すべてのデータ変更をまとめて一度だけ コミットする方式 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 業務処理 全150万件 次のデータ を処理 処理の途中に一定単位で区切り、 複数回に分けてコミットする方式 コミット間隔 コミット間隔(n件)ごと にまとめてDBに反映 全件処理する まで繰り返し 中間コミット 顧客情報取得 テーブル登録 CUSTOMER 顧客情報取得 ORDER_PRICE _SUMMARY 業務処理 全150万件 次のデータを 処理 1件ごとDBに反映 個々の処理やレコードごとに随時 コミットを行う方式 逐次コミット コミット回数:150万回 コミット回数:1回 コミット回数:150万/n回 コミット間隔(n件)を 変化させて検証
  36. 39 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コミット数による処理時間比較 性能検証結果 10 20 30 40 処 理 時 間 (分) 39分31秒 35分14秒 37分19秒 1,000件 (コミット:1,500回) 10万件 (コミット:15回) 1万件 (コミット:150回) コミット間隔
  37. 40 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    コミット数による処理時間比較 性能検証結果 10 20 30 40 処 理 時 間 (分) 39分31秒 35分14秒 37分19秒 1,000件 (コミット:1,500回) 10万件 (コミット:15回) 1万件 (コミット:150回) コミット間隔 コミット数1万のときの処理時間が最も短い
  38. 41 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ベンチマーク測定:ジョブの多重化 性能検証結果 顧客注文金額集計ジョブに対して、 多重化ありの場合と多重化なしの場合の処理時間を比較 ログ出力量 ログ出力の有無で性能を比較 • ログ出力あり • ログ出力なし 設計ポイント① コミット方式 コミット方式/コミット間隔の違い による性能を比較 • 逐次コミット • 一括コミット • 中間コミット 設計ポイント② ジョブの多重化 ジョブを多重化した場合の性能 を比較 • 多重化あり • 多重化なし 設計ポイント③
  39. 42 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ジョブの多重化 性能検証モデル 入力データを各ファイルに分割し、ファイルごとに同一ジョブを多重実行する方式 1,000,000~1,500,000 500,000~1,000,000 1~500,000 データ分割ジョブ CUSTOMER 顧客注文金額集計 ジョブ1 顧客注文金額集計 ジョブ2 顧客注文金額集計 ジョブ3 CUSTOMER 1~500,000 CUSTOMER 500,000~1,000,000 CUSTOMER 1,000,000~1,500,000 多重度によるデータ分割処理 顧客注文金額集計ジョブ を多重で実行
  40. 43 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    多重化による処理時間比較 性能検証結果 10 20 30 40 処 理 時 間 (分) 多重なし 多重あり 35分14秒 18分9秒 ※中間コミット(コミット件数1万)、多重度3
  41. 44 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    多重化による処理時間比較 性能検証結果 10 20 30 40 処 理 時 間 (分) 多重なし 多重あり 35分14秒 18分9秒 ※中間コミット(コミット件数1万)、多重度3 多重化することで処理時間が約半分に短縮
  42. 45 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    47分13秒 まとめ 性能検証結果 10 20 30 40 50 処 理 時 間 (分) 逐次コミット ログなし 一括コミット ログあり 7時間41分 35分14秒 18分9秒 50分37秒 3分24秒 11分59秒 17分5秒 一括コミット ログなし 中間コミット ログなし 中間コミット ログなし 多重化 32分28秒 ※中間コミット(コミット件数1万)、多重度3
  43. 46 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    47分13秒 まとめ 性能検証結果 10 20 30 40 50 処 理 時 間 (分) 逐次コミット ログなし 一括コミット ログあり 7時間41分 35分14秒 18分9秒 50分37秒 3分24秒 11分59秒 17分5秒 一括コミット ログなし 中間コミット ログなし 中間コミット ログなし 多重化 32分28秒 ※中間コミット(コミット件数1万)、多重度3 設計を工夫することで半分以上の時間を短縮することが可能
  44. 47 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    47分13秒 まとめ 性能検証結果 10 20 30 40 50 処 理 時 間 (分) 逐次コミット ログなし 一括コミット ログあり 7時間41分 35分14秒 18分9秒 50分37秒 3分24秒 11分59秒 17分5秒 一括コミット ログなし 中間コミット ログなし 中間コミット ログなし 多重化 ※中間コミット(コミット件数1万)、多重度3 32分28秒
  45. 48 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    47分13秒 まとめ 性能検証結果 10 20 30 40 50 処 理 時 間 (分) 逐次コミット ログなし 一括コミット ログあり 7時間41分 35分14秒 18分9秒 50分37秒 3分24秒 11分59秒 17分5秒 一括コミット ログなし 中間コミット ログなし 中間コミット ログなし 多重化 ※中間コミット(コミット件数1万)、多重度3 32分28秒 しかし・・・
  46. 49 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    さらなる性能向上! 性能検証結果 実装方式だけで大きく性能を向上させることができるが、さらに性能を上げる方法があります。 その方法は・・・
  47. 50 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    さらなる性能向上! 性能検証結果 単純明快!お金の力を使います!!
  48. 51 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    さらなる性能向上! 性能検証結果 インスタンスタイプ:t3.medium (4GiBメモリ, USD 0.0544/時間) ボリュームタイプ:マグネティック (IOPS 40~200, USD 0.08/GB 月) インスタンスタイプ:r6i.xlarge (32GiBメモリ, USD 0.304/時間) ボリュームタイプ:io2 (IOPS 3000, USD 0.142/GB 月)
  49. 52 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    マシンスペックを上げた場合 性能検証結果 10 20 処 理 時 間 (分) 通常のマシン スペックを上げたマシン 6分3秒 18分9秒 ※ログ出力なし、中間コミット(コミット件数1万)、多重度3 インスタンスタイプ:r6i.xlarge ボリュームタイプ:io2 インスタンスタイプ:t3.medium ボリュームタイプ:マグネティック
  50. 53 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    マシンスペックを上げた場合 性能検証結果 10 20 処 理 時 間 (分) 通常のマシン スペックを上げたマシン 6分3秒 18分9秒 ※ログ出力なし、中間コミット(コミット件数1万)、多重度3 インスタンスタイプ:r6i.xlarge ボリュームタイプ:io2 インスタンスタイプ:t3.medium ボリュームタイプ:マグネティック さらに3分の1まで処理時間が減少
  51. 54 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    マシンスペックを上げた場合 性能検証結果 基本的にバッチアプリケーションは大量のデータを入力し出力します。 ディスクのIOPSやメモリ、CPUサイズなどを「課金」すればさらなる性能向上を得ることができます! マシンスペックの向上は、 ジョブごとに適したマシンを選択すること が重要です。 ⚫ 金銭的に余裕がある ⚫ アプリ全体に手が入れづらい ⚫ 急いで性能を上げる必要がある といった場合に用いる手段です。