データベースの最適化
ファイルが肥大する?
練習2:で作成した「売上集計.accdb」。
ひととおり作業が終わって、Accessを閉じ、一息入れながらふと見ると、ファイルサイズが4メガバイトを超えています。
最近では、これくらいのファイルサイズ、たいしたことありませんけど、でも、もしかしたらこのファイルサイズ、適切ではないかもしれないんですよ。
図1:ファイルのサイズが4メガバイト。けっこうでかくなるんだなぁ。
パソコンのディスクの構造や、データの保存の仕組みに通じる話なので、細かく理解しようとするとどんどん横道にそれちゃうんですが・・。練習2で作成したような、削除クエリや追加クエリを使ってテーブルのレコードをざっくり削除→追加を繰り返すタイプのデータベースの場合は、こういうこともちょっと知っておいたほうがいいかもしれません。
データをざっくり削除すると、データは消えますが、このデータベースのファイルサイズは小さくはならないんです。
データがあったところがぽっかり残って、新しいデータは別の場所に置かれるんですよ。
そのため、データの削除→追加を繰り返していると、実際のデータ件数はたいしたこと無いのに、ファイルサイズがやたらデカイ、という状態になるんです。
リレーショナルデータベースのシステムではわりと当たり前のことなんですが、パソコンソフトではこういうのは珍しいことかもしれません。多少の大きさであれば、そうそう神経質になることもありません。ただ、スカスカ率が高くなってくると、無駄にディスク空間を食ってるわけですし、あまりいい状態とは言えないのです。
無駄に大きいサイズのデータベースファイルは、「データベースの破損」という悲しい状態に陥る可能性もあります。
最近では、パソコンの性能の向上やOSの機能アップなどで、パソコンのファイルが「破損」することは、ほとんどなくなりましたが、100%というわけではありません。何かの拍子にファイルが開けなくなってしまったりする可能性は無きにしもあらずです。
Accessデータベースも同様で、ファイルが破損する可能性は秘めています。その要因のひとつに、このような、「スカスカ状態のブカブカファイルのまま長年ほうっておく」ということが挙げられます。
余談ですが、「どういうことをしたら、破損するんですか?破損しないようにするにはどうしたらいいんですか?」って聞かれることがあるんですが、そんなのわかりませんよ・・・。預言者じゃないんだし。
本棚に本を入れてあって、「この本はどういうことをしたら破けるんでしょうか?破けないようにするにはどうしたらいいですか?」って聞いてるようなもんです。皆さんならどう答えます?
使わなければ破けないと思いますが、家が火事になったり大洪水が起きたりしたら、破けるかもしれません。シロアリが攻めてくるかもしれない。時が流れ地球が回っている限り、可能性はゼロではないのです。
それは、パソコンのファイルも同じです。
ただ、気をつけることはできますよね。気をつけて大切に読む。読み終わったら元の場所に収める。丁寧に扱っていれば破ける確率はぐっと低くなるはずです。
仕事が終わったら開きっぱなしにせずにデータベースを閉じる、とか、共有フォルダに置く場合はできる限り複数で同時に使用しないようにする、とか、ファイルサイズが2GB近くになるようだったらデータを分けるなどの工夫をする、とか、こまめにファイルのコピーを別のフォルダにとっておく、とか・・・・ファイルに負担がかからない使い方への気配りは、いろいろできるはずです。何よりもまず、「どうすれば壊れないのか」ではなく、適切な使い方を心がけるようにすることです。
これからお話しする「データベースの最適化」という操作も、そのうちのひとつです。最適化をすると、スカスカの部分をきれいにして、データベースが適切な状態になるのです。
決して、「これやっときゃ壊れない」という意味ではないんですよ。
では、「データベースの最適化」の手順を見てみましょう。作業自体はごくごくカンタンです。
<データベースの最適化 手順>
左上のOfficeボタンをクリックし、出てきたメニューの中から「管理」を選択します。
右側に「データベースの最適化/修復」というメニューが出てきますので、これをクリックします。
すると、一瞬画面がふっと変化しますが、何事も無かったかのようにもとの状態になります。
この一瞬の間に、実は、かなりいろいろなことが起こってるんですけどね。最後にちょっと触れますね。
また、データベースファイルのサイズが100MBとか200MBとか大きくてスカスカ率が高いと、ちょっぴり時間がかかることもあります。
図4:データベースの最適化は、これ選ぶだけ
ファイルサイズ、確認してみましたところ、ほおーずいぶんちっちゃくなってました。というか、これが適切なファイルサイズなんですよね。
今までは、データの削除→追加を繰り返していたため、スカスカになってただけだったんですよね。
なので、最適化したからといってファイルサイズが小さくなるわけじゃないんですよ。そのサイズが適切、って場合もありますからね。
図5:ちっちゃくなった、もとい、適切になった
「データベースの最適化」は、実は、開いているデータベースファイルではできないことなんです。
デリケートな作業みたいなんですよね。
「データベースの最適化」を実行したときのその一瞬に何が起きているかというと、表現はあまり適切ではありませんが、
1)空のデータベースファイルを作る
2)空のファイルに全てのオブジェクトを移動
3)今のデータベースを削除
4)空のファイルに今のデータベースの名前を付ける
というようなことをAccessがこっそりやってます。
Accessがやるので、上記のような大雑把な処理ではないですが、まあ、ざっくりと私たちにも理解できるような表現を取ると、上記のような処理が行われています。これはこれで、結構デンジャラスな感じですよね。
なので、「最適化すりゃあいい」的な考え方で毎日最適化しまくる、というのも、実はちょっと考えものなんです。
業務の合間に、様子を見て、ときどき最適化しておく、という感覚がベストかな・・・と思います。
「何日おきにやればいいのか」というものでもないし、自動化するものでもない、というのが私の考え方です。
作成日:2009-01-14