
sqlite 最適化 - Firefox拡張機能
Firefox 3.0.0 - 3.6 用
Ver. 0.7.7 ( 2010/03/31 )
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 のみ行うようにしてみました。
/>> Ver.0.7.5
1. Firefox 3.6 対応
2. extensions フォルダのサブディレクトリ以下の sqlite ファイルも最適化出来るようになりました。
/>> Ver.0.7.6
1. install.rdf 修正
/>> Ver.0.7.7
1. de-DE, ko-KR ロケール追加
71 コメント:
はじめまして、素晴らしい拡張機能を公開してくださり感謝しております。
早速なのですが、私の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できました。お騒がせいたしました。ただ、原因が不明なのが気になります。
Ver 0.7 を使っています。
REINDEX に16秒ぐらいかかるのですが,これは正常でしょうか?
REINDEX の前に VACUUM をする設定にしてあるのですが,フラグメントが20%未満で VACUUM が行われなかったときでも,16秒ぐらいかかります。
Arusさん:
マシンスペックや*.sqlite ファイルの数等の絡みもあるとおもいますのでなんともいえませんが。
一度バッチファイルを使った方法で reindex をしてみてもらえないでしょうか。
同じくらいの時間がかかるようであればそれで正常かと思われます。
Firefoxがだんだんと遅くなってストレスを感じていました。
もうFirefox使うの止めてまたIEに戻ろうかと思っていた時に、こちらのアドオンを知りました。
お陰さまでFirefoxがまた快適なブラウザになってくれました。
どうもありがとうございました。
シーサーさん:
バッチファイルを使って reindex しても,時間がかかりました。
これで正常なのですね。
ありがとうございました。
はじめまして。
便利な拡張をありがとうございます。
10回終了ごとの最適化ですが、終了回数をカウントするのは、最後のウィンドウを閉じたときだけにするのはいかがでしょうか?
複数のウィンドウを開いたり閉じたりする人、ポップアップのあるサイトを良く使う人でも、これなら使い勝手が良くなると思います。ご検討ください。
--- sqlite_opt.js~ 2009-08-24 10:41:08.000000000 +0900
+++ sqlite_opt.js 2009-12-16 22:28:35.861951800 +0900
@@ -9,8 +9,9 @@ var bc = Application.prefs.getValue( 'sq
//var vr = Application.prefs.getValue( 'sqlite_opt.vacuum_before_reindex', false );
// 終了回数で判定
-
- cc++;
+ if ( 1 >= Application.windows.length ) {
+ cc++;
+ }
if( ck && cc >= bc ){
sql_opt_ReindexAll( false );
cc = 0;
uさん:
はじめまして。
なるほどですねー。
3.6対応時に頂いたアイディアを取り入れようかと思います。ありがとうございます。
他にうまい手があるかとは思いますが、ぜひお願いします。
ちなみに
1 >= Application.windows.length
は
1 > Application.windows.length
でしたね。失礼しました。
あけましておめでとうございます
Thunderbird3.0にも対応なにとぞよろしくお願いします。
匿名さん:
あけましておめでとうございます。
去年からちょろちょろやって入るのですが、本業が;;
しばしのご辛抱を。
sqlite3.exeをバッチファイルで動かしてOS起動時にvacum&reindexしています。
このソフトに置換えようと思ったのですが、やはりアドオンでは制限が付きますね。
アドオンにこだわらず外部ソフトにする方法もあるのではないでしょうか?
この外部ソフトに色々オプションもつけ易いと思うのですが・・・
匿名さん:
返事が遅くなりました。
> sqlite3.exeをバッチファイルで動かしてOS起動時にvacum&reindexしています。
私も実ははじめの内はそうしていたのですが、バッチファイルのウィンドウがどうも邪魔くさくなってアドオンを作ってみた次第でして...。
外部ソフトだとすでに海外製のものが出ているので、私の出る幕はなさそうで ^-^;
素晴らしい拡張機能をありがとうございます。
Fierfox3.6にしてから以下のエラーが発生するようになりました。
こちらで公開されている拡張機能でのエラーかと思い、お伺いいたします。
万が一、原因が違うようでしたらお詫び申し上げます。
このページのスクリプトは処理に時間がかかっているか応答しなくなっています。今すぐスクリプトを停止するか、このまま処理を続行させるか選択してください。
スクリプト: chrome://sqlite_opt/content/storage.js:***
匿名さん:
storage.js だとこの拡張ですね ><;
なにか大きな sqlite のデータベースがあるんでしょうか。。。
もし、処理に時間がかかりそうな大きなファイルがあれば教えていただけると、なにかいい方法が見つかるかもしれません。...
最近アップグレードしたところ,ブラウジング中に数十秒間フリーズしたようになる現象が解消しました。
ありがとうございました。
Arusさん:
結局原因不明ですが、治ってよかったです。
Mozilla Security Blog、Planet Mozilla に Fx 3.6 のセキュリティ問題が報告されていたので、Fx 3.6.2 RC build-3 をインストールしてみたところ SQLite Optimaizer が無効化されました。
install.rdf の maxVersion を見たところ 3.6 となっていたのですが、(Fx 3.0.0~)3.6.0 にのみ適応を意味しているのでなければ、この記述は 3.6.* とするのが適当だと思われます。
今月末には、3.6.2 がリリースされる予定ですので、このままだと大量の SQLite Optimaizer 難民の発生が予想されますので、余計なお世話かと思いましたが、報告させていただきました。
Firefox3.6.2にしたら、SQLiteOptimizerが無効になってしまいました。
さっさとUPDATEしてください。
↑無料で使わせてもらっているのに、その言い方は無いでしょうに。
install.rdfの内容を自己責任で書き換えて使ってみてはどうでしょうか。
3.6.2への早い対応ありがとうございます。
匿名さん:
install.rdf の記述が不十分だったためご迷惑をおかけしました。
本日、修正版が公開されましたので宜しければ新しい方に差し替えてください。
待ってました!
ありがとうございました!
Dear Mr. c_sar:
It is a pleasure using your Add-on, SQLite Optimizer. I am fascinated by your Extension, not only because of the efficiency it brings to Firefox, but also of the modesty, that it does not add any symbols and any icons to Statusbar or anything like that. It would be better, so I think, if more Firefox users in the world could know SQLite Optimizer and benefit from it.
Firefox users, whose primary Language Setting of the Browser is not set to English, must face Mozilla’s SQLite Optimizer page written exclusively in Japanese. I use for instance german Firefox (de-DE), my wife korean edition of it (ko-KR), but we had to change address of the site manually in order to find english descriptions. But it would be absolutely much better, if we and other users could meet a page in German, Korean and any other languages.
So I tried translating the description page and sqlite_opt.dtd file. I hope you like it. Please feel free to contact me, if you find it helpful to you and your developing work, so that I can send it to you. It was impossible to do that with "sqlite_opt@c_sar.jp".
Thanks a lot for developing SQLite Optimizer.
Dear Mr. H.-C. Kim:
Thank you for a wonderful proposal.
I want to receive the proposal with pleasure.
I will send my mail address by mail, please send the file, when free.
UbuntuユーザーのFirefox使いです。
ありがとうございます。アドオンのおかげでなかなかクロームに移行出来ないので、高速化関連は有難いです。"Configuration Mania"とともにありがたく使わせて頂いてます。
WinXP SP3、Firefox 3.6.8 です。
この拡張をインストールすると、Firefox の終了時に Firefox が応答しなくなります。他の拡張をひとつずつインストールしてみて、異常のないことを確認し、最後にこれを入れたら再現しました。
バージョンは 0.7.7 です。
ありがたく使わせてもらっています
昨日4.0bの日本語版が登場しましたが
4.0系に対応する予定はあるのでしょうか
個人的には是非対応してほしいのですが
すみません、また再発しました
プロファイルを作ってから半日での再発です
Firefox を閉じようと、ウィンドウ右上の×をクリックしても、閉じません。
何度かクリックすると、「このプログラムは応答していません」と出ます。
SQLite Optimizer を無効化すると、解決します。
以上が今のところうちで起きた現象です。
問題の再現にやっと成功しました。
環境設定で「Firefox 終了時の処理」の
終了時にsqliteデータベースのREINDEXを実行する」にチェックを入れると、Firefox 終了時にフリーズします。
3.5からcookieの最適化が出来ないと書かれてますが、私の環境では無問題です。
Beef Taco (Targeted Advertising Cookie Opt-Out) 1.3.1が有効にしてあるとcookieは最適化出来ませんが、
無効にしたら問題なく最適化出来ます。
何故だろう?
portable版
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.12) Gecko/20100824 Firefox/3.5.12
k.snhrさん:
バタバタしておりまして、返事が遅くなりまして申し訳ありません。
ブラウザ終了時にvacuum等を行っているのが良くなさそうですね。
次期バージョンでは、アイドル時に最適化を行うように変更してますので、症状が良くなればいいのですが。。
ご返信ありがとうございます。
次期バージョンが出来上がりつつあるのですね。期待しております。
初めまして。失礼致します。
REINDEXを実行すると、当然ですがstylishのsqliteにも作用してしまい、スタイルが使用できなくなってしまいます。
スタイルを再度入れなすことで現在は対処しているのですが、これがなかなか手間でして・・・^^;
勝手な質問で申し訳ありませんが、何か回避できる方法がありましたらご回答願います・・・
SQLite Optimizerの開発は終了されたのでしょうか。
Firefox4への対応はないのでしょうか。
教えていただければ幸いです。
初めまして。
SQLite Optimizer とても便利で助かっています。
ありがとうございます。
Firefox 4.0 の対応予定はありますか?
教えてください。
コメントを投稿