MySQLのテーブル最適化

  • 投稿日:
  • by
  • カテゴリ:

データベースを最適化してMovableTypeの再構築プロセスを高速化できるかも? - Open MagicVox.net

PostgreSQL や SQLite では VACUUM 文, MySQL では OPTIMIZE TABLE 構文を用いて データベースのテーブルを最適化することができます。 特にデータストレージにデータベースを使用しているブログシステムでは, スパムコメントやスパムトラックバックを削除したり一つのエントリを何度も編集したりと, どうしてもデータベースが断片化し易い環境にあります。

MySQLは定期的にVACUUMする必要がないというのがウリだったと思うのですが、やはり長年使っているとフラグメントするんですかね?
基本的に使いっぱなしで何もしていないので、一応やってみました。

/var/db/mysql に optimize.sql という名前で、

USE `(MTのデータベース名)`;
OPTIMIZE TABLE `mt_as_ua_cache`;
OPTIMIZE TABLE `mt_asset`;
OPTIMIZE TABLE `mt_asset_meta`;
OPTIMIZE TABLE `mt_association`;
OPTIMIZE TABLE `mt_author`;
OPTIMIZE TABLE `mt_author_meta`;
OPTIMIZE TABLE `mt_author_summary`;
OPTIMIZE TABLE `mt_blog`;
OPTIMIZE TABLE `mt_blog_meta`;
OPTIMIZE TABLE `mt_category`;
OPTIMIZE TABLE `mt_category_meta`;
OPTIMIZE TABLE `mt_comment`;
OPTIMIZE TABLE `mt_comment_meta`;
OPTIMIZE TABLE `mt_commentsubscriptions`;
OPTIMIZE TABLE `mt_config`;
OPTIMIZE TABLE `mt_entry`;
OPTIMIZE TABLE `mt_entry_meta`;
OPTIMIZE TABLE `mt_entry_rev`;
OPTIMIZE TABLE `mt_entry_summary`;
OPTIMIZE TABLE `mt_ext_bl_group`;
OPTIMIZE TABLE `mt_ext_bl_groupmap`;
OPTIMIZE TABLE `mt_ext_bl_item`;
OPTIMIZE TABLE `mt_ext_bl_log`;
OPTIMIZE TABLE `mt_ext_bl_permission`;
OPTIMIZE TABLE `mt_ext_bl_source`;
OPTIMIZE TABLE `mt_ext_bl_update`;
OPTIMIZE TABLE `mt_field`;
OPTIMIZE TABLE `mt_fileinfo`;
OPTIMIZE TABLE `mt_ipbanlist`;
OPTIMIZE TABLE `mt_log`;
OPTIMIZE TABLE `mt_mailform_setting`;
OPTIMIZE TABLE `mt_notification`;
OPTIMIZE TABLE `mt_objectasset`;
OPTIMIZE TABLE `mt_objectscore`;
OPTIMIZE TABLE `mt_objecttag`;
OPTIMIZE TABLE `mt_permission`;
OPTIMIZE TABLE `mt_placement`;
OPTIMIZE TABLE `mt_plugindata`;
OPTIMIZE TABLE `mt_profileevent`;
OPTIMIZE TABLE `mt_profileevent_meta`;
OPTIMIZE TABLE `mt_role`;
OPTIMIZE TABLE `mt_session`;
OPTIMIZE TABLE `mt_stats`;
OPTIMIZE TABLE `mt_statwatchconfig`;
OPTIMIZE TABLE `mt_tag`;
OPTIMIZE TABLE `mt_tbping`;
OPTIMIZE TABLE `mt_tbping_meta`;
OPTIMIZE TABLE `mt_template`;
OPTIMIZE TABLE `mt_templatemap`;
OPTIMIZE TABLE `mt_template_meta`;
OPTIMIZE TABLE `mt_template_rev`;
OPTIMIZE TABLE `mt_touch`;
OPTIMIZE TABLE `mt_trackback`;
OPTIMIZE TABLE `mt_ts_error`;
OPTIMIZE TABLE `mt_ts_exitstatus`;
OPTIMIZE TABLE `mt_ts_funcmap`;
OPTIMIZE TABLE `mt_ts_job`;

という内容のファイルを作成しました。 これはMT5.0のテーブルなので、他のバージョンでは異なる可能性があります。

これを実行させるには、MySQLのドキュメントによると

www# mysql < /var/db/mysql/optimize.sql

とやればいいみたいです。 自分は Webmin の「SQLを実行」からファイルを指定して実行しました。
とりあえずちゃんと最適化できたみたいですが、効果については測っていないのでわかりません。