SQLiteのサイズを小さくする。 SQLiteのサイズを小さくする。

-
# 理屈をよく分かって書いているわけではありませんが

5か月ほどspamの処理ができていなかったために、データベースが異様に肥大し、200MBを超えるようになりました(中略)管理画面からspamを削除したのですが、それでも一度大きくなったSQLiteのデータファイルは小さくならないようで、MTが異様に重くなっています。(中略)さて、どうしたら解決できるでしょうか。

あー。確かに。
このご時世、多少なりともトラフィックあるブログが5ヶ月もほっとかれたら、
どんな悲惨なことになるか、容易に想像が付く…

僕も、SPAMを消したり、再構築したり、
なんやかやとしてるんで、多分だいぶゴミが付いてると思うんだよね。
一度スッキリさせてみたい。

で、松永さんのダイアリの方に、
有効そうなコメントが付いてたので、それを参考にしてやってみました。
そのコメントとは、以下の通り。
Ctrans 『>一度大きくなったSQLiteのデータファイルは小さくならないようで
sqliteのvacuumを使えば、ファイルサイズを小さくできます(少なくとも削除したspamの分)。
MTのことはよく分かりませんが、sqliteのデータベースファイルをダウンロードして、TkSQLite(
http://reddog.s35.xrea.com/wiki/TkSQLite.html)でそのDBファイルを開き、「データベース」メニューからvacuumを実行するのが手軽でいいと思います。』


TKSQLiteってのは、まぁ、SQLiteの管理ツールのようなものらしい。

まず、WEBからDBファイルをダウンロードしてきて、
次に上のツールをダウンロード(インストールは解凍のみ)。

『ファイル』 - 『開く』から、DBファイルを選択し、開く。
次に、『データベース』 - 『VACUUM』を選択。



上のような警告が出るので、OKを押すと処理が始まり、程なく終了。
14MB強のDBを処理するのに掛かった時間は、だいたい10秒くらい。

結果。





おー大体、14%程度の削減に成功。
まぁ元々がそうでかくないから、あんまり変わらないのかもしれないけど。
仮に200MBのDBで14%削減ならでかいんでは。

『最適化』にしては、いい出来何じゃないかなーって感じ。
処理のDBファイルを戻しても、問題なく動いてるし。



一番上に書いてるとおり、理屈が分かってるわけではないので、
オススメまでは出来ませんけど。



参考:

SQLite が認識できるクエリー言語 - VACUUM

SQLステートメント ::= VACUUM [インデックスまたはテーブル名]
VACUUM コマンドは PostgreSQL における同様のコマンドをモデルにした SQLite の拡張機能です。VACUUM がテーブルまたはインデックス名を伴って実行されると、指定されたテーブルまたはインデックスを整理するものと見なします。 SQLite のバージョン 1.0 では VACUUM コマンドは gdbm_reorganize() を呼び出してバックエンドのデータベースファイルを整理します。

9月にMovable TypeのデータベースをSQLiteに移行したわけですが,スパムやログを消しても減らずに肥大化する一方でちょっと恐怖しております(^...

 最近Movable Typeの管理画面に長時間アクセスできない事態が2度ほどあ...

最近やたらブログのエントリー投稿に時間が掛かるようになってしまった。 再構築ならともかく、エントリー1件登録するだけでも結構な時間がかかる。 時間帯的にサ...

Movable Type 4.1にアップグレードして発生した問題 from フジハラボ -- 目指せ!スーパーエンジニア

既存のBlogはうまく移行できたのだけれど、新しく作ったこのブログの設定が大変だ...

MovableTypeのSqliteを最適化する from ブログ(blog)にトライ&ビルド!

日付が変わりましたが本日2回目の更新です。 先ほど記事をアップしたあとまるで更新...

COMMENTS