
sqlite 最適化 - Firefox拡張機能
Firefox 3.0.0 - 3.5 用
Ver. 0.7 ( 2009/08/25 )
Firefoxプロファイルフォルダ直下にある *.sqlite データベースの最適化を行います。
※ Firefox 3.5 からは
これらの db を最適化したい場合は他サイトで紹介されている sqlite3.exe 等を使った方法をご利用ください。
10回終了のたびに問答無用で vacuum するのもどうかと思い始めているところです。
PRAGMA freelist_count と PRAGMA page_count の比率が 20% を超えたらreindex と vacuum を実行し、それ以下なら reindex だけ実行しようかと思案中。。。。
最適化のタイミング:
自動または手動
自動の場合は Firefox を10回終了するたびに1度最適化を実行します( about:config で変更可 )。
sqlite_opt.auto_reindex_per_browser_close (デフォルト 10)
最適化の方法:
/>> Ver. 0.1
各 sqlite データベースに対して REINDEX を実行します( about:config で VACUUM に変更可 )。
sqlite_opt.use_vacuum_instead_reindex ( デフォルト false )
※ 0.6 以降は設定画面で設定可能。
/>> Ver. 0.2
Reindex のみ(デフォルト)。
Vacuum 後 Reindex 。
選べるようにしました。
これにともない sqlite_opt.use_vacuum_instead_reindex は廃止。
sqlite_opt.vacuum_before_reindex ( デフォルト false )
を新設。
/>> Ver.0.5
Firefox 3.5 に対応しました。
エラー処理が甘々だったのを改善。
/>> Ver.0.5.1
突然 FF 3.5.1 がリリースされたので、install.rdf のみ修正して、再度アップしました。
/>> Ver.0.6
1. places.sqlite の vacuumとreindex に対応しました。(asmさんありがとうございます)
2. 「reindex 前に vacuum」 を設定画面から指定できるようになりました。
/>> Ver.0.7
1. FF 3.0.* で places が vacuum/reindex 出来なくなっていたのを修正。
2. フラグメント(データベースの未使用領域)が 20% 未満の場合は vacuum が指定されていても vacuum をスキップして、reindex のみ行うようにしてみました。

32 コメント:
はじめまして、素晴らしい拡張機能を公開してくださり感謝しております。
早速なのですが、私のFirefox3.0.8で、
sqlite_opt.vacuum_before_reindexをtrueに設定して今すぐ実行ボタンを押すと、
エラーコンソールに
エラー: uncaught exception: [Exception... "Component returned failure code: 0x8052000e (NS_ERROR_FILE_IS_LOCKED) [mozIStorageConnection.executeSimpleSQL]" nsresult: "0x8052000e (NS_ERROR_FILE_IS_LOCKED)" location: "JS frame :: chrome://sqlite_opt/content/storage.js :: sql_opt_Reindex :: line 55" data: no]
と出て、何もせず?状態になります。
falseの場合は完了ダイアログボックスが出てくれます。
つたない説明で恐縮ですが、解決方法等ございましたらよろしくお願いします。
おはようございます。
感想ありがとうございます。
エラーメッセージからすると、データベースがFirefoxから使用された状態になっているのでvacuum出来ないのが原因のようです。
[今すぐ実行]でエラーが出て、Firefox終了時に自動的に実行させた場合にはエラーが出ないようであれば Firefox 終了時に最適化させるようにしていただけるのが良いかと思います。
本来 vacuum は Firefox が終了した状態でやるのが一番いいので隠しオプションにしてありましたので....、直接的な解決方法じゃなくてすみません。
お返事ありがとうございます。
私の環境ですと、
sqlite_opt.vacuum_before_reindexをtrueに設定すると、
sqlite_opt.close_countが
sqlite_opt.auto_reindex_per_browser_closeで設定した値の一つ前で止まります。
10なら9、2なら1で値が増えなくなります。
Firefox終了時もHDDにアクセスしていないようです。
sqlite_opt.vacuum_before_reindex:falseだと
上記のようなことは事はありません。
vacuumは諦めた方がいいですかね。
う~ん、そうですね。
Reindex が元々の目的の拡張機能ですので、reindex のみでおねがいします。
ところで、ご利用の環境は Mac ですか?
了解です、お手数をおかけしました。
環境は、XPHomeSP3、Fx3.0.8です。
はじめまして。firefox3では、このアドインのおかげで、めちゃめちゃ起動が高速化され、助かりました。
3.5版も、ぜひぜひよろしくお願いいたします。
keitoさん:
ありがとうございます。
遅くなりましたが、本日 3.5 に対応した版をアップしました。Mozilla Addons に反映されるのはもうちょっと時間がかかりそうですので、後しばらくお待ちください。
TOPPOさん:
3.5対応版でエラー処理を見直しました。今度は途中で止まることはなくなったかと思います。
もしよろしければ動作の結果を教えていただけると助かります。
ありがとうございます(^^)
3.5対応、ホントありがとうございます。
劇的に早くなりました~。
いまのところ、不具合はないようです。
今後ともよろしくお願いします。
keitoさん:
早速ありがとうございますm(__)m
FF が標準で同じような機能を実装してくれたらお待たせすることも無いんですけどね~
places.sqliteは
var conn = Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection;
でアクセス可能です
cookieは無理ですが
ただ。。。すごく大きいので処理に時間かかるんですよね
asmさん:
おお、ありがとうございます。
参考にさせていただきます。
ゴタゴタが落ち着いたら挑戦します。
0.2をベースにFx3.5対応およびVACUUM抑制を
ここ(http://vimperator.g.hatena.ne.jp/teramako/20090429/1240981936)とか
ここ(http://code.google.com/p/sqlite-manager/issues/detail?id=219#c3)を参考にコピペしてみた
http://dl.getdropbox.com/u/127081/sqlite_opt%40c_sar.jp/content/storage.js
私以外の使用を想定してない欠陥品ですが
asmさん:
遅くなりました。
7/31に提示していただいたコードでうまく行きました。ありがとうございました。
もうしばらくこのまま使ってみて、特に変なところもないようでしたら v0.6 としてアップしたいと思います。
SQLite Optimizer 0.6試してみました。
3.0.13では(portable版だからか?)places.sqliteのreindexが出来ていないようです。
portable版
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13
新規に落として試しました。
オプションのREINDEX sqlite database on exitとVACUUM before REINDEXは両方共にチェックせずにREINDEX now実行すると、
↓の結果です。
V R
- o content-prefs.sqlite
- o cookies.sqlite
- o downloads.sqlite
- o formhistory.sqlite
- o permissions.sqlite
x x places.sqlite
- o search.sqlite
- o urlclassifier3.sqlite
エラーコンソールに↓
[Exception... "Component returned failure code: 0x80570018 (NS_ERROR_XPC_BAD_IID) [nsIJSCID.getService]" nsresult: "0x80570018 (NS_ERROR_XPC_BAD_IID)" location: "JS frame :: chrome://sqlite_opt/content/storage.js :: sql_opt_Reindex :: line 57" data: no]
また、
オプション画面を表示(Add-onsでOptinsボタンをクリック)するとエラーコンソールに↓の警告が出る。
Warning: Empty string passed to getElementById().
REINDEX nowボタンを押してdoneウィンドが出た時にOKボタンを押しても↑の警告が2回出る。
portable版
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2
では問題ないようですが、
Warning: Empty string passed to getElementById().の警告は同じように出ます。
V R
- o content-prefs.sqlite
- o cookies.sqlite
- o downloads.sqlite
- o formhistory.sqlite
- o permissions.sqlite
- o places.sqlite
- o search.sqlite
- o signons.sqlite
- o urlclassifier3.sqlite
R. さん:
報告ありがとうございました。
修正版をバージョン公開しました。
Warning: Empty string passed to getElementById() の件については、まだ解決できていません。
私がインストールしているほかの拡張機能でも設定ダイアログを表示すると同じようなメッセージが出るのがありますね...。うーむ。
Masaaki さん:
反映されるのにちょっと時間がかかるようです。
しばしお待ちください。
古いバージョンを表示をクリックしたところ、
https://addons.mozilla.org/ja/firefox/addons/versions/11198
のページになりねそちらに0.7が登録されていました。
0.7 インストールさせていただきました。
この前 sqlite3 で VACUUM したばかりなので、VACUUM は試すことができませんでしたが。
ところで Thunderbird への対応は考えていらっしゃいませんか?
主なターゲットは global-messages-db.sqlite という超重量級ですが。
Caiさん:
はじめまして。ダウンロードいただきありがとうございます。
Thunderbird ですか。私も Thunderbird 使いですが、global-messages-db.sqlite というファイルはプロファイルフォルダに見つかりませんでしたが。
お使いの Thunderbird のバージョン等教えていただけないでしょうか。私は 2.0.0.23 を使用中です。
Caiさん:
global-messages-db というのは TB3 で使用されているデータベースなんですね。いま、β3 をインストールしてみました。基本的には install.rdf の アプリケーションidを変えればいけそうな気がするのでちょっと試してみます。
Caiさん:
なんとか、global-messages-db.sqlite の vacuum/reindex ができるようになりましたが。
Pentium4のPCで約330MBのglobal-messages-dbを処理すると5分近くかかりました。
はたしてこれは実用に耐えうるのか...。
あ、TB3のcookies.sqliteもやはりアクセス不能ですね。
すいません、肝心なこと書き忘れてましたね。
Tb3 系列から Fx3 系列と同様、sqlite がメインで採用されるようになります。
> Pentium4のPCで約330MBのglobal-messages-dbを処理すると5分近くかかりました。
> はたしてこれは実用に耐えうるのか...。
やはりそれくらいかかってしまいますか……
自動処理は外して手動のみにしたほうがいいかもしれませんね。
Thunderbird だけでなく Calendar (Lightning, Sunbird) への対応もお願いできませんでしょうか?
これらでは プロファイルフォルダ内の *.sqlite ファイルだけでなく、storage.sdb ファイルおよび calendar-data フォルダ内の *.sqlite ファイルが対象になります。
Caiさん:
>Thunderbird だけでなく Calendar (Lightning, Sunbird) への対応もお願いできませんでしょうか?
普段は Googleカレンダーを使っているもんで・・・、って、拡張機能入れればGoogleカレンダーが使えるんですね。いいですね。
Sunbird早速入れてみました。
Lightning はまだ TB3 には対応してないようですね。
挑戦してみます^^
Caiさん:
Lightning Nightly Updater (Unofficial) 0.9.090618 で無事インストールできました>TB3 対応のLightning
こんにちは。以前のバージョンから利用させていただいて、FOXが快適に使えるようになり、とても感謝しています。
今回、0.7をダウンロードして、早速REINDEXを実行してみましたところ、下記のように、VACUUMの結果がすべて「%」になっています。これで正常に動作していますでしょうか? ご教示いただけると幸いです。すばらしいアドオンをありがとうございます。
V R
% o content-prefs.sqlite
% x cookies.sqlite
% o downloads.sqlite
% o formhistory.sqlite
% o permissions.sqlite
% o places.sqlite
% o search.sqlite
% o urlclassifier3.sqlite
RJさん:
ありがとうございます。
説明不足ですみませんでした。
% は問題ないです。
VACUUMのチェックボックスが入っている状態で、フラグメントが20%未満の場合はVACUUMをスキップするようにしていますので、その場合は "%" と表示するようにしてます。
シーサー様
了解いたしました。ご返信いただき、ホントにありがとうございます!! これからも末永く愛用させていただきます。
はじめまして。下記サイトからSQLite Optimizer をインストールできないようです。「インストールファイルが壊れています」というような表示が出ます。ご確認いただければ幸いです。
https://addons.mozilla.org/ja/firefox/addon/11198
DrBさん:
報告ありがとうございます。
う~ん、こちらで試してみましたがそのようなエラーは表示されませんでした。。。。
右クリックでダウンロードしてからインストールしても壊れてる旨のメッセージは出るんでしょうか。
今日は問題なくDWLできました。お騒がせいたしました。ただ、原因が不明なのが気になります。
コメントを投稿