つべこべ言わずとにかくやっとけ!
吉村 我が家では、真夜中に風呂場でサンバを踊りながらムード歌謡風に念仏を唱えると早死にするから、絶対にしてはならぬと、先祖代々言い伝えられています。
長江 ファンキーな家系なんですね。
吉村 ミッションクリティカルなシステム運用の現場では、「データベース再編成」もそんな扱いを受けているそうですね。
長江 受けていません。でも、「理屈抜きでとにかくやったほうがいい」という点では同じかもしれません。
吉村 つべこべ言わずに、とにかくやっとけと。ちなみに、そもそもデータベース再編成って、そもそも何のことでしたっけ?
長江 一言で言えば、「データベース中のデータの並びを整理整頓する処理」のことです。データベースを新しく構築した直後は、個々のデータは互いに隙間なく、きれいに詰められて並んでいるんですけど、データの追加や削除、更新を繰り返していると、だんだんデータとデータの間に隙間ができた「歯抜け状態」になります。いわゆる「データの断片化」と呼ばれる現象ですね。そうなると、個々のデータの格納位置を突き止めたり、新しくデータを挿入するための空きスペースを探すのに余分な時間が掛かるようになり、データベース全体の性能もだんだん劣化してくるんです。
吉村 あー、何となく心当たりがあります。
長江 本当に……?
吉村 あるあるあるある~。
長江 とにかく、そうやってデータが広い範囲に散在するようになると、本来は単一ページに収まるはずのデータも、複数ページにまたがってしまいます。すると、ディスクI/Oの性能に大きく影響を与えるだけでなく、メモリキャッシュからデータがあふれてしまう可能性も高まります。こうした事態を防ぐために、定期的にデータとデータの間の空き領域を詰めて、データをきれいに並べるかえる処理のことをデータベース再編成といいます。
吉村 つまり、PCでいうところの「デブ LOVE!(はあと)」と同じ原理ですね!
長江 「デフラグ」です。「PCの動きが遅くなってきたな」と感じたとき、デフラグを実行してHDDの中を整理すると途端にサクサク動くようになりますよね? あれと同じことです。
吉村 じゃあデータベースも、スループットが遅くなってきたと感じたら再編成を実行すればいいんですね!
長江 そんなことでは、早死にしますよ。
吉村 は、はい?
長江 先ほど、「とにかく理屈抜きでやる」ことが大事だと言いましたよね。本当はPCのデフラグだって、遅くなってきたと感じてからやるのではなく、普段から定期的に実行しておくことが大事なんです。デフラグを実行している最中は、すべてのPC作業がストップしてしまいますよね?
吉村 そうですね。その間は仕事がほとんどストップしてしまうので、ちょっとイライラすることがあります。急ぎの仕事が入ることもありますし、そのためにデフラグを中断するのも、思わぬ副作用がありそうでちょっと怖いですし。
長江 同じことが、データベース再編成にも言えます。再編成を行うには、いったんデータを別領域に退避させた上で、あらためてデータを配置し直す必要があるため、処理に長い時間がかかる上、その間はデータベースの運用はストップしてしまいます。言うまでもなく、ミッションクリティカルなシステムではそうおいそれとシステムを止めるわけにはいきませんから、軽いノリで「遅くなってきたから、ちょっくら再編成しておくか」というわけにはいかないんです。
吉村 たしかに(笑)。
長江 そこ笑うところじゃないです。
吉村 拝承。
長江 それに、「遅くなってきたら」「こんな問題が発生したら」「こんな現象が観測されたら」といった具合に、特定の事象に反応する形でデータベース再編成を行うとしたら、個別のケースごとに運用の手順をいちいち設計してテストする必要があります。これには膨大な手間が掛かる上に、実際に運用が始まると必ずといっていいほど「想定外のケース」が発生します。こうした事態を防ぐ上でも、また余計な手間を掛けずに安全確実にデータベースを運用していく上でも、データベース再編成は余計な判断をなるべく排して、定期的にシンプルに実施していくのがベストなんです。