パスワードを忘れた? アカウント作成
10730670 journal
日記

shuichiの日記: トランザクションのcommitは思っているよりと遅い 3

日記 by shuichi

とあるバッチ処理で、時間内に処理が終わらないという問題が発生した。

このバッチは、読み込んだデータを、少々加工しワークテーブルに挿入しており、
20,000件の場合で約5分かかる。

プログラムを確認したところ、1件挿入するたびにコミットする様になっていた。
このワークテーブルは他のプログラムからは使用されない。
全件挿入後にコミットするように変更したところ、1分弱で終わるようになった。

さて、コミットの処理は遅いとよく言われているが、どれほど遅いのだろうか?

データベースのACID特性で、Durability(永続性)というのがある。。
ACIDをサポートしたデータベースなら永続性を保証する為、
コミットの度に必ず最低1回、DirectI/Oが発生する。

HDDのスペックが下記の通りだと仮定する。

回転数:10000rpm
平均回転待ち時間:3ms (60000ms / 10000rpm)
平均シーク時間 :9ms

平均アクセス時間は

平均シーク時間+平均シーク時間+データ書き込み時間

なので、データ書き込み時間は無視するとして、
1回のコミット辺り、12msの待ち時間が必要となる

データの件数が20,000件なので、処理時間5分の内、なんと4分がコミットによる待ち時間だということになる。

ここからが本題

20万件のDB上のログテーブルを削除するバッチがある。
これが1時間たっても終わらず、業務の開始に合わないという事態が発生した。

理由は・・・

さて、ここまですべて基本情報技術者の試験範囲なわけだが、
君は応用情報技術者試験持ってるのに、ここまで説明して何故解ってくれない?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...