Sep 17, 2006

PeriodicVacuum Plugin 0.01公開

定期的にデータベースのvacuum命令を実行するプラグインを作ったので公開しておきます。

PeriodicVacuum_Plugin - ogawa - 定期的にMovable TypeデータベースのVacuumを実施するプラグイン。 - Google Code

データベースでは一般に、削除したレコードが使用していた領域は、解放されずに再利用されます(なぜそうなっているかと言えば、解放操作はレコードの削除のたびに実施するには重すぎる処理で、再利用した方が大抵の場合都合が良いからです)。このため、例えば、トラックバック・コメントスパムを大量に受信した場合、それらを削除してもデータベースファイルのサイズはほとんど変化しないという現象が観測されるはずです。

このことは、特にレンタルサーバなどでSQLiteを使用している場合には問題となり得るでしょう。なぜなら、SQLiteが使用するデータベースファイルのサイズを、多くとも、賃借しているディスク容量以内に抑える必要があるからです。

一方で、データベースファイルの非使用領域の解放操作は、明示的に指示すれば、どのDBエンジンでもおおむね可能です。例えば、SQLiteやPostgresではvacuum命令、MySQLではoptimize table命令が用意されており、これらを実行すれば非使用領域の解放とインデックスの再構成が行われるようになっています。

PeriodicVacuumプラグインは、一週間に一度*1、vacuum命令を実行する機能を実現します。これにより、自動的にデータベースファイルのサイズを小さく保つことができます。

*1 正確にはエントリー、コメント、トラックバックなどを削除したタイミングで、前回のvacuum命令の実行から一週間以上経過していた場合にだけ実行されます。


このプラグインは、Movable Type 3.3で追加されたTask Manager機能の習作です。週に一度実行されるtaskを登録しておき、このtaskを実行するコールバック関数を、MT::App::CMSでMTオブジェクトを削除したときに呼び出されるフックに登録してあるだけです。類似の機能を実現したい場合にはこのプラグインのソースコードが役に立つでしょう。

定期的に実行する必要がなければ、vacuumの実行は下のような簡単なスクリプトでも実現できます。こちらならMT 3.3でなくても利用できます。

vacuum.cgi

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com