カレンダー

2023/08
  
  
       

広告

Twitter

記事検索

ランダムボタン

億単位の処理

by 唐草 [2023/08/07]



 稼働4年目のデータベースにあるログテーブルを確認したら5.5億件の記録があった。エクセルでの管理は無理な量だが、データベースなら許容範囲内。とは言え、想像よりも記録が多い。
 何が記録を増やしているのかと調べたら、毎分三十数件ずつログが蓄積されていた。「なんだ毎分30件か」と侮ってはいけない。1日で48万件。1年で1.7億件にもなる。
 ひょっとしてログの大半が、このログなのではないだろうか?それは果たして記録する必要のあるものなのだろうか?
 そんな疑問から大量に溜まったログの意味を調べてみた。ざっくり言えば、カレンダー更新成功の記録だった。
 コンピュータの世界において成功ログは、失敗ログよりも価値が低いというのがぼくの持論。つまり、ログのほとんどは無価値で、毎日48万件のゴミが溜まっているのと同じ。
 ハードディスクは十分にある。でも、5.5億件をバックアップするには30分以上かかる。それ以上に大変なのがリストア。リストアなんてサーバが壊れた時ぐらいにしかしないレアな作業。でも、そういう時は1秒でも早く復旧させろと急かされる。先日、試しに半分をリストアしたら6.5時間もかかった。全体の復元なら13時間かかる計算になる。
 とてもじゃないけれどやってられない。ゴミを復元することに価値はない。なので、必要なログは残しつつゴミの全消去を試みた。
 手作業で消せる量ではない。それにゴミは点在しているので範囲指定で全消しもできない。
 単純にカレンダー更新成功ログを検索して消そうとしてもうまくいかないだろう。5.5億件すべてを対象に処理をするので気が遠くなるほど時間がかかるし、消去中のサーバはフリーズかと思うほど反応が遅くなる。だからと言って、先頭から1行ずつ処理するなんて以ての外。
 頭を使って消さねばならない。例えばログを50,000行ずつ取得して、消すべき行番号をリストアップする。そのリストを参考に削除命令を発行する。こんな感じの小さいサイクルの処理を何度も実行するのが、負荷低減と速度を両立できる方法だろう。
 5万行ずつ処理しても1万回もかかる。何日かかることやら。試算だけでもイヤになる。