COLUMN
開発
Accessで作った業務ツールを長く使っていると、ある日「ファイルがやけに重い」「保存に時間がかかる」と感じ始めます。私はAccessのツールを10年以上保守してきましたが、ファイルサイズの相談はほとんどが、上限近くまで膨らんでからです。ユーザーはAccessのファイルサイズに上限があることを、あまり知らないからです。この記事では、Accessのファイルサイズが膨らむ原因と、最適化(コンパクト化)でどこまで小さくできるのか、そしてなぜ最適化だけでは解消しないのかを、現場で対応してきた経験をもとにお話しします。
結論から言うと、Accessのファイルが膨らむ主な原因は、ファイルの中(ローカルテーブル)にデータを溜め続ける作りになっていることです。
私が保守してきた小売業の受発注ツールも、まさにそうでした。一つは取引履歴です。発注のたびに記録が増えていきますが、古い履歴を消す仕組みがなく、ただ積み上がっていきます。もう一つは商品マスタの取り込み方でした。このツールでは、毎回ローカルのテーブルへ商品マスタを総入れ替えしていましたが、その際に実際には使っていない項目まで一緒に取り込んでいました。この不要な項目の取り込みが、サイズを押し上げる一因になっていました。
こうした「Accessの中にデータを保持し続ける作り」は、このツール特有のものではありません。むしろ業務用のAccessではよく見かける作りです。だからこそ、使い込むほどファイルサイズが肥大化していきます。
見落とされやすいのは、ユーザーがファイルサイズに上限があること自体を知らない点です。Accessのファイルには2GBという上限があり、ここに達するとファイルが開けなくなります。上限を知らないまま使い続け、限界を迎えてから「急に開かなくなった」と相談に来られる、というのが現場でよくある流れでした。
最適化(コンパクト化)を実行すると、ファイルサイズはある程度まで小さくなります。私が対応したケースでは、状況によりますが、2GBあったファイルが1GB近くまで減ったこともありました。
ただ、ここで知っておいてほしい点があります。最適化で減るのは、あくまで一時的に使われていた領域や、削除済みのデータが確保していた領域の分だけということです。Accessはデータを消しても、見た目上は消えていますが、内部では、すぐに削除されず、領域が確保された状態になります。最適化は、この使用していない領域を解放することで、ファイルを実際に使っている分の大きさまで縮める処理だとイメージすると分かりやすいでしょう。
ただ、最適化で使用していない領域を解放できても、ローカルテーブルに保存しているデータそのものが減るわけではありません。保存するデータ量が多く、しかも履歴の積み上がりやマスタの取り込みで増え続ける作りのままなら、最適化の効果は薄く、一度小さくしてもまた同じペースで膨らんでいきます。減らしては増えを繰り返すうちに、いつかまた上限に近づきます。
私はこの最適化を、問い合わせがあったときに実行していました。応急処置としては役に立ちますが、根本の作りが変わらない限り、同じ問い合わせが時間をおいて繰り返される、というのが実感です。最適化はあくまで一時的な暫定対応として使用しています。Accessの設定でAccessの終了時に最適化を行うようにできるので、設定しておくのもおすすめです。
ファイルサイズへの対応は、その場の業務を止めない暫定対応と、再発を防ぐ恒久対応の二段構えで考えています。
まず、急いで何とかしたいときの暫定対応は次の2つです。
1. 最適化を実行して、ファイルサイズが減るかどうか試す。
2. Accessの中を確認し、使っていない不要なテーブル、データがあれば削除する。
これらで一時的にサイズは下がりますが、データが増え続ける仕様のままでは再発します。そこで暫定対応のあとに、再発させないための恒久対応を行います。
恒久対応の柱は次の3つです。
1. データの外出し。Accessの中にデータを溜めず、DBサーバ側でデータを保持し、Accessはそれを参照する形に変える。
2. データのローテーション。保持期限を決め、期限を過ぎた古いデータは自動的に削除する仕組みを設ける。
3. 取り込むデータの見直し。マスタなどで使っていない項目を取り込まないように整理する。
ここまで来ると、もう個別の手当てというより、Accessの作り直しを検討してもよいタイミングかもしれません。特にデータの外出しは、Access単体の改修の範囲を超える対応になりやすく、作り直し(リプレイス)を含めてAccessからの脱却を考えてみる一つのきっかけになります。
Accessのファイルサイズが膨らむ主な原因は、ファイルの中にデータを溜め続ける作りにあり、最適化は一時的な対応で、仕様が同じなら再発します。現在進行形でファイルが大きくて困っているなら、まずは(1)最適化で減るか試す、(2)不要なテーブル、データを消す、から始めてみてください。繰り返し限界が来るようなら、データの外出しやローテーションといった作りそのものの見直しが必要なサインです。
愛知県で40年、業務システムの開発と保守を担ってきた当社では、Accessの肥大化への対処から、その先の作り直しのご相談まで対応できます。お気軽にご相談ください。
お問合せ
ITコラム 一覧