« 他人のコメントを略奪する事をid:Ubuntuさんに強要するGreaseMonkey | メイン | URLでQRコード作成 »

SQLiteのDBファイルをダイエットさせてみた

SQLiteのDBは、肥大化し易いらしい。
一度大きくなったファイルが勝手には小さくならないとかなんとか。
つまり一度大きなデータを入れた後に、DeleteやDropを実行しても容量は変わらないという事らしい。
で、それを整理するのがvacuumという処理。
SQLiteのmanを見ても--helpを見てもよくわからなかったのでGUIのあるtoolを探してみた。
で、あちこちで言及されているのがTkSQLiteというやつ。
でも、ほとんどがWindows版の説明でMacで使う方法が書かれていない。
よくわからないままDLして実行してみたけどPackageが足りないとかでErrorが発生。
% ./tksqlite.tcl
Error in startup script: can't find package dict
    while executing
"package require dict"
    invoked from within
"if {[info tclversion] < 8.5} {
package require dict
}"
    (file "./tksqlite.tcl" line 123)
tkだかtclだかもうわけが分からないが、依存関係のようだ。
じゃあ、MacPortsで。
こいつなら依存関係があってもなんとかしてくれる。
% port search tksqlite
No match for tksqlite found
え、ないの?
で、しばらくネットを探しているとこんなものを見つけた。
Add-onでDB Manager?
マジで?
入れてみた。
すごい!
Tableを見られるだけじゃなく、IndexやTriggerも見られる!
SQLも実行できる!
XULからSQLって無茶しすぎで笑った。
どうやってるんだ?
で、vacuumの実行方法を探したけど見当たらない。
また、ネットで調べる。
sqlite3.exe と places.sqlite が同一フォルダ内にある場合は、コマンドプロンプトを起動させ、そのフォルダへ移動後、「sqlite3.exe places.sqlite vacuum」と打ち込めば、再構築できます。(sqlite3.exe と places.sqlite をフルパス指定でも良いです。バッチファイルを作成しておくともっと良いかもしれません。)
え、ちょっと待って。
じゃあ、Unix/Linuxの場合は、「sqlite3 [DB_Path] vacuum」でできるってこと?
試してみたら、できた。
Add-on入れた意味ないし...。
まあ、今度から使うから良いけど...。
SQLite Managerでのやりかたは、「[メニュー]=>[Database]=>[Compact Database]」っぽい。
試してないから詳細はわからない。
結果的には、54.3MBあったファイルが40.3MBまで減った。
で、アプリケーションにDBファイルを戻してみた。
気のせいか、若干はやくなっている。
もしかしてIndexを構築しなおした?

トラックバック

このエントリーのトラックバックURL:
http://www.kanasansoft.com/cgi/mt/mt-tb.cgi/171

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google