バッチ処理 メモリ使用量の削減
お世話になります。
お客様から、バッチ処理中にメモリ使用量が100%を超えて途中で落ちてしまうことがあると問合せをもらいました。
バッチの内容としては、
親タスク Counter(0)<=365*n (n年間分を1日ずつ処理)
のレコード後でサブタスクのバッチを呼び出し、
サブタスクはSQLコマンドで、WHERE句で該当の日付を指定しており、必要な項目をSUMで集計し、外部コール→COM起動でエクセルの書き込みを行っています。
私の環境では問題ないので、客先PCのスペックのせいだとは思うのですが、プログラム側でメモリ使用量に対する対策などは可能なのでしょうか。
ご教授頂けますと幸いです。
-
こんにちは。
SQLコマンドを365回×年数分 子タスクで呼び出すよりかは
Group By で日付毎の計を1回の取得で済ませてしまうのもいいのかもしれないと思いました。 -
KMさん、
Windows側で、「ページングファイル」のサイズを増やしてもらうのが一番だと思いますよ。スワップ中にバッチが多少遅くなるかもしれませんんが、メモリ不足で落ちることはなくなるはずです。
-
KM様
10年分なら3650回 子タスクCALLし、3650回 SQLコマンドを実行していますよね。
その作りのままだとすれば、子タスクを常駐YESにするのもいいのかもしれません。
自分なら
SELECT 日付,Sum(売上) FROM 対象データ
WHERE 日付 BETWEEN ’20240101’ AND ’20241231’
GROUP BY 日付
ORDER BY 日付
で1年分の日別の計を1回のSQL文で結果入手したいです。 -
nkmtさん
タスクの構造に関しては、エクセル記述の関係で色々考慮した結果、このような構造になったような記憶があります。タスク常駐、試してみたいと思います。ご回答ありがとうございました。
Tandaさん
プログラム側ばかり考えていましたが、Windows側でも対策可能なんですね。私自身そこらへんの知識が乏しいので調べてみます。ご回答ありがとうございました。
-
KMさん、
設定箇所は、「コントロールパネル」→「システム」→「システムの詳細設定」→「パフォーマンス」→「設定」→「詳細設定」→「仮想メモリ」→「変更」→「カスタムサイズ」→「初期サイズ・最大サイズ」です。
今は、メモリが安くてふんだんに手に入りますから使う機会が少なくなったかもしれませんが、メモリが高かった昔は、ここをよく使ったものです。
サインインしてコメントを残してください。
コメント
5件のコメント