これまでも数千万レコードのデータを処理することは幾度かありましたが、大変苦労してきました。今回テストデータと言うことで、数百万件のデータをC#からDMLの発行で作成してみましたが、いろいろと問題が出てくるものです。
いわゆるバッチ処理の難しさになるのでしょうが、大量のデータを処理する場合には、操作が途切れる瞬間が基本的にはありません。つまり、ひたすら同じことを繰り返す場合でも、インスタンスの生成のタイミングをどのように行うかや例外が発生したときの処理をどうするかなど考慮するべきことが多数あります。
いろいろ考えてプログラムを作っているつもりだったのですが、少量のデータでは問題が顕在化してこなかっただけだったことを痛感しました。(例外を握りつぶしたら、他のスレッドも例外が発生し連鎖的に例外が…メモリがあっという間に食い尽くされる様子を間近に見ましたよvv)
たまには長時間の処理を行うプログラムを書くことで自分のプログラムが本当にプログラムとして問題がないか確認してみると良いかもしれないです。