エラー
OutOfMemoryError: GC overhead limit exceeded
OutOfMemoryError: Java heap space
原因
OutOfMemoryError(OOMエラー)は、一度のジョブで転送するデータ量がTROCCOの処理能力を上回ってしまい、TROCCOのジョブ実行コンテナのメモリを使い切っている場合に発生します。
より具体的には、下記のケースにおいて発生します。
- データの取得時:TROCCOの転送設定の内容によって、取得対象のデータ量が膨大になる
- データの投入時:転送先コネクタ側の同時接続数などの設定内容によって、処理量が膨大になる
対処法
いくつか対象方があるので、コネクタや環境によって選択してください。
転送データを分割する
転送元コネクタの設定により、取得したデータ量が膨大である場合、一度に取得するデータ量を減らす必要があります。
たとえば、転送元コネクタの設定の以下の部分を、取得データ量が少なくなるよう調整してください。
- 転送元ファイル・ストレージ系:パスプレフィックス
- 一度に取得するファイル数を減らせるよう、階層を深く指定してください。
- カスタム変数を埋め込むことで1ファイルずつ取得できます。
- 転送元データベース系:クエリ
- WHERE句を記述することによって、一度に取得するレコード数を減らしてください。
- WHERE句にカスタム変数を埋め込むことによって、実行のたびに取得するレコードを動的に指定できます。
- 転送元クラウドアプリケーション・広告系:データ取得期間
- 期間を絞り込むことによって、一度に取得するレコード数を減らしてください。
- データ取得の開始日・終了日にそれぞれカスタム変数を埋め込むことができます。
上記に加え、取得対象のカラムを絞ることや、カスタム変数ループ実行を利用してジョブ自体を分割することもご検討ください。
(参考)カスタム変数ループ実行
ジョブ設定を見直す
TROCCOで同時に複数のジョブを実行すると、転送先サービスに対して多くの処理をリクエストすることになります。
同時刻に実行するジョブが多くなりすぎないよう、スケジュール設定やワークフローの並列実行数を調整してください。
一回のリクエストで取得する行数を引き下げる
一部の転送元コネクタには、一回のリクエストで取得する行数を指定できる設定項目が存在します。
このような設定項目がある場合、その設定値を適宜引き下げてください。
バッチサイズを引き下げる
一部の転送先コネクタには、バッチサイズを指定できる設定項目が存在します。
このような設定項目がある場合、その設定値を適宜引き下げてください。
転送先サービス側の設定を調整する
転送先サービス側でメモリの割り当てや同時接続数の上限を指定できる場合、その値を調整してください。
たとえば転送先Snowflakeであれば、同時実行クエリの制限によって、1クエリあたりのパフォーマンスを向上させることができます。
(参考)同時実行クエリの制限
コメント
0件のコメント
記事コメントは受け付けていません。