SSブログ

Firefox の sqlite の最適化 [Firefox]

またまた放置してしまいましたが、ぼちぼち生きてます。

2013-02-13頃、書きました。

□ 1. 概要

Firefox が使用する *.sqlite データベースファイルを最適化する手順のメモ。

最近、Firefox の重さに我慢できなくなった。
原因のひとつが SQLiteデータベースにあり、それを最適化すると、改善する場合がある(らしい)。
そして、最適化とは vacuum して reindex する事らしい。(←嘘かもしれません)

それが目的のアドオン、SQLite Optimizer :: Add-ons for Firefox があるのだが、Firefox 17.0/18.0 あたりは未対応のよう。(2013-01-23時点)
このアドオンを展開して、どこかを書き換えれば動くかもしれないけど、今回は別の方法が見つかったので、そっちで。

2013-01-19 片鱗懐古のブログ: sqlite3でfirefoxのプロファイルをvacuum
なるほど、コマンドライン(?)からやれば良いわけですね。ありがとうございます>片鱗懐古のブログさん

この方法での最適化を Linux と Windows でやってみたのでメモしておく。

□ 2. バージョンなどメモ

Linux


- OS: CentOS 5.9
- Firefox: 17.0 i686
- SQLite3: 3.3.6
- Date: 2013-01-23

Windows


- OS: Windows XP pro.
- Firefox: 18.0.2
- SQLite3: 3.7.15.2 (?)
- Date: 2013-02-13

□ 3. SQLite3 の入手

Linux

インストール済みだったので何もしていない。
$ rpm -q sqlite
sqlite-3.3.6-6


Windows

SQLite Download Page から、"sqlite-shell-win32-x86-3071502.zip (266.31 KiB)" をダウンロード。
中身は sqlite3.exe がひとつ入っているだけ。今回は Firefox のプロファイルフォルダに置いた。(これにしか使わないから)

□ 4. 最適化するデータベースファイル

データベースファイルは、プロファイルフォルダにあるみたい。

- プロファイル | Firefox ヘルプ

Linux

ls -l *.sqlite の結果
 -rw-r--r-- 1 myname myname   589824  1月 23 08:34 addons.sqlite
 -rw-r--r-- 1 myname myname   262144  1月 22 08:26 chromeappsstore.sqlite
 -rw-r--r-- 1 myname myname   229376  1月 21 08:43 content-prefs.sqlite
 -rw-r--r-- 1 myname myname   524288 12月 12 17:20 cookies.sqlite
 -rw-r--r-- 1 myname myname    65536  1月 23 08:30 downloads.sqlite
 -rw-r--r-- 1 myname myname   163840  1月 23 08:38 evernote_webclipper.sqlite
 -rw-r--r-- 1 myname myname   524288  1月 23 08:38 extensions.sqlite
 -rw-r--r-- 1 myname myname   851968  1月 23 08:49 formhistory.sqlite
 -rw-r--r-- 1 myname myname   163840  1月 23 08:51 permissions.sqlite
 -rw-r--r-- 1 myname myname 10485760  1月 23 08:49 places.sqlite
 -rw-r--r-- 1 myname myname    65536  8月 27 17:36 search.sqlite
 -rw-r--r-- 1 myname myname   327680  9月  6 10:27 signons.sqlite
 -rw-r--r-- 1 myname myname 57671680 11月 21 10:23 urlclassifier3.sqlite
 -rw-r--r-- 1 myname myname    98304 11月 29  2011 webappsstore.sqlite


Windows

dir *.sqlite の結果
 2013/02/13  09:35           589,824 addons.sqlite
 2013/01/17  08:23           262,144 chromeappsstore.sqlite
 2012/12/12  10:38           229,376 content-prefs.sqlite
 2013/01/21  13:00           524,288 cookies.sqlite
 2013/02/04  10:47            65,536 downloads.sqlite
 2013/02/12  08:31            98,304 evernote_webclipper.sqlite
 2013/02/12  08:31           524,288 extensions.sqlite
 2013/02/13  08:50         4,751,360 formhistory.sqlite
 2013/02/13  09:43            65,536 permissions.sqlite
 2013/02/13  09:43        10,485,760 places.sqlite
 2012/06/22  08:30            65,536 search.sqlite
 2012/09/06  10:17           327,680 signons.sqlite
 2012/11/20  11:05            98,304 webappsstore.sqlite


□ 5. スクリプトを書いた

Firefox のプロファイルフォルダに、ごく簡単なスクリプトを作った。
- どちらもバックアップファイルを作って、最適化する。
- バックアップファイルがある場合はやらない。
- sqlite3 の使い方が、よくわからないので違っているかも。

Linux

Shell Script で。
 $ cat optimize_sqlite.sh
 #!/bin/sh
 while [ "x$1" != "x" ]
 do
         database=$1
         backupfile=$database.backup
         if [ ! -e $backupfile ]
         then
                 cp -p $database $backupfile
                 sqlite3 $database "vacuum;reindex;"
         fi
         shift
 done


Windows

Windows のバッチファイルは、繰り返し処理とか、条件分岐とか・・・独特かつプアで困る。
MS-DOS時代からあまり変わってない。MSさん的には「GUIを使ってね」と、あえてやってないだけだと思けど・・・。
Cygwin を入れたくなるが、それをこらえて 2つのバッチファイルを作った。

for文の引数に複数のコマンドを書く方法もあるらしいけどが、その中で条件分岐ってどうやるのかわからない。
出来たとしても、きっとわけわからん事になるので、2つに分けた。
もっと良いやりかたがありそうだけど・・・。

- optimize_sqlite.bat
 @echo off
 for %%d in (%1) do cmd/c "optimize_sqlite_exec.bat %%d"


- optimize_sqlite_exec.bat
 @echo off
 if "x%1" == "x" goto label_noargs
 
 set database=%1
 set backupfile=%database%.backup
 
 if exist %backupfile% goto label_backup_exist
 
 copy /b /v %database% %backupfile%
 sqlite3 %database% "vacuum;reindex;"
 goto label_exit
 
 :label_noargs
 echo usage: optimize_sqlite_exec sqlite-databse-file
 goto label_exit
 
 :label_backup_exist
 echo %backupfile% is found, ignored
 goto label_exit
 
 :label_exit


□ 6. 最適化してみる

Firefox がデータベースファイルをオープンしているかもしれないので、Firefox を終了して実行。

Linux

 $ sh optimize_sqlite.sh *.sqlite


Windows

 C:\(省略)> optimize_sqlite *.sqlite


□ 7. 結果

リンクをクリックしてページのロードが開始されるまでが、早くなったような気がする。

Linux

サイズが変わったのは以下の4つ。あとは変わらなかった。
places.sqlite が、変わってないのは、Vacuum Places Improved :: Add-ons for Firefox で、お掃除していたからだと思う。

- chromeappsstore.sqlite : 262144 => 98304
- formhistory.sqlite : 851968 => 720896
- permissions.sqlite : 163840 => 131072
- urlclassifier3.sqlite : 57671680 => 43843584

Windows

- chromeappsstore.sqlite: 262144 => 98304
- cookies.sqlite: 524288 => 131072
- formhistory.sqlite: 4751360 => 4816896 (ちょっと増えた?)
- places.sqlite: 10485760 => 4325376

おわり
nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

ブログを作る(無料) powered by SSブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。