Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


--年--月--日

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


2009年04月01日

CPU負荷の低いバッチ処理

「CPU負荷の低いバッチ処理ってあるんですかねえ・・・。」

通常、バッチ処理なんかは運用時間中のレスポンス性能を考えた場合、
誰も使用していない時間帯に実行する(いわゆる、夜間バッチってやつ)
ようにしたり、日中バッチが実行される必要性がある場合などには、「
今からバッチ流します。遅くなりますよ~」なんていうアナウンスを
したりするもんです。

ところが、今係わっているシステム、タイマー起動でバッチが流れるの
ですが、CPU負荷が低いらしく、いつやっているのかわからない。
よくある話で、バッチスケジュールのドキュメントが未整備で公開され
ていないので、あたりを付けるのにCPU負荷をトレースしたが、なんか
ピンとこない。そこで冒頭のQになったわけですが、

「ありますよ。ループで処理されている場合は低くなりがちですね。」

という訳で、簡単なサンプルを作成してやってみました。
DBはOracle10g、AIX版です。

65万件のトラン中、50件程度の件数をアップデート。
1つはループ処理、もうひとつは一括更新。

CPU負荷をタスクマネージャで見てみました。ついでに実行時間も。

・ループ処理(レコードロック有り)
CPU負荷は以下のとおり。実行時間:1分47秒(45/650,000件更新)

loop.jpg

・一括更新処理(レコードロック有り)
CPU負荷は以下のとおり。実行時間:2秒(45/650,000件更新)

update_fine.jpg

ちなみに 50,000/650,000件更新は一括で9秒。

update_half.jpg

また 300,000/650,000件更新は一括で24秒でした。

update_half2.jpg

Oracleのループ処理って、速いイメージだったのですが。
意外にもOracleのループ処理はそんなに速くない。

[ posted by H.K ]

この記事に対するコメント


この記事に対するコメントの投稿














管理者にだけ表示を許可する



この記事に対するトラックバック
トラックバックURL
http://comfair2.blog24.fc2.com/tb.php/413-81590eb3
この記事にトラックバックする(FC2ブログユーザー)











上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。