2009年5月5日

Firefox 3 日漸肥大的收藏庫:減肥法

(作者上週在 Blog 發表 減肥法 後,陸陸續續收到網友的迴響,並撰寫了 續篇,在此結合兩篇文章的完整內容呈現)


只要用了 Firefox 3 幾個月,你一定會感覺到反應明顯遲鈍了起來,尤其是在開啟、關閉、跟檢視歷史紀錄等跟「收藏庫」有關的功能上。在此我們要透過簡單的幾個指令,幫 Firefox 3 日漸肥大的收藏庫減肥!


Firefox 3 會把你所有上過的網站、輸入過的網址通通一五一十的紀錄在 Profile 目錄中的 places.sqlite 資料庫檔案裡。


這個檔案的位置在個人 profiles 的目錄中,目錄名稱是「亂碼.default」。
XP 在 C:\Documents and Settings\\Application Data\Mozilla\Firefox\Profiles\
Vista 放在 C:\Users\\AppData\Roaming\Mozilla\Firefox\Profiles\
Linux 在 ~/.mozilla/firefox/
Mac 在 家目錄\資源庫\Application Support\Firefox\Profiles\


清理Firefox 3肥大的places.sqlite 01

看看我的 places.sqlite,已經肥大到 414MB 了,而這不過是從去年 12 月底開始使用至今呢!最簡單的清理法就是直接把 places.sqlite 刪除,開啟 Firefox 時會自動重建這個檔案,但是瀏覽紀錄就全沒了。


清理Firefox 3肥大的places.sqlite 02

從收藏庫查看,可以發現已經記錄了 4 萬筆網站。Firefox 預設最多會保留四萬個網站、90 ~ 180 天的瀏覽紀錄,雖然可以調整 Firefox 的參數,控制瀏覽記錄儲存天數等相關設定,但是又會使 Awesome Bar 的威力下降。


由於有的網友 places.sqlite 很小,有的卻很大,同樣記錄了數萬個網站的收藏庫,有的網友跟我一樣上百 MB,有的卻只有數 MB。收藏庫檔案增大的狀況每人不一,非常奇怪,我開始懷疑有擴充套件在吃空間,因此接下來把 places.sqlite 每個單獨的 table 拆開來看看容量。


這是我的 places.sqlite 的結構:


places.sqlite結構

我把每個 Table 獨立匯出後,每個 Table 大小如下(places.sqlite 檔案大小為 84 MB):


places.sqlite各table大小

很明顯的是,moz_annos 這張表佔了整個資料庫檔案總容量的 86%,問題一定出在這邊。annos table 的內容包含以下的部份,的確看到幾個擴充套件使用了這張表儲存資料。


moz_anno_attributes: annos table內容

在我的收藏庫中 moz_annos 的內容,各 ID 筆數分別為:10(網頁編碼)117 筆、14 "google-toolbar/thumbnail" 2971 筆、15 "google-toolbar/thumbnail-score" 2971 筆。


看到這邊,已經確認問題出在 Google Toolbar 工具列這個擴充套件上。其中 ID 14 的 "google-toolbar/thumbnail",兩千多筆資料,每筆竟然都是 base 64 編碼的 png 圖檔。


讓我們取出一筆來 Decode:


隨選一筆出來decode

得到某個網站的縮圖:


這就是Google存在places.sqlite裡的東西

其實這是 Google Toolbar 5 的新功能「新分頁」所使用的縮圖:


Google Toolbar 新分頁功能

如果各位朋友跟我一樣,對這個畫面沒有什麼印象。可以開啟下述網址看看:


chrome://google-toolbar/content/new-tab.html

此外,@littlebtc 發現 Bugzilla 中,已經有人回報這個問題:Bug 489173 – Latest Google Toolbar Appears to Make places.sqlite Massive,也有人回報給 Google。我先前安裝的 Google Toolbar 5 for Mac 版本是 5.0.20090122Mb2,最新的 5.0.20090324M 版不知道是否已經修正了這個問題。


這個功能,可以在 Google Toolbar 的設定畫面中,透過取消主畫面倒數第三個選項「啟用 Google 新分頁網頁」來關閉。


Google Toolbar 設定畫面

接下來,我要使用簡單的 sql 命令,清除 places.sqlite 檔案中無用的紀錄,並保留實用的部份。Windows 的使用者請先前往 SQLite Download Page,下載 Precompiled Binaries For Windows 中的 sqlite-3_6_13.zip,解壓縮至目錄中,而 Mac OS X 已經內建了 sqlite3。


請事先備份你的 places.sqlite 檔案,並小心服用。進行前請先把 Firefox 關閉,如果沒關,我也不知道會發生什麼事情!


以下指令請在 Firefox 3 的 Profile 目錄下,以命令列逐行執行。


sqlite3 places.sqlite "DELETE FROM moz_historyvisits WHERE place_id IN (SELECT id FROM moz_places WHERE visit_count <=2 );"
sqlite3 places.sqlite "DELETE FROM moz_places WHERE (visit_count <=2 AND hidden <> 1 AND id NOT IN (SELECT place_id FROM moz_annos UNION SELECT fk FROM moz_bookmarks));"
sqlite3 places.sqlite "DELETE FROM moz_inputhistory WHERE place_id NOT IN (SELECT id FROM moz_places);"
sqlite3 places.sqlite "DELETE FROM moz_favicons WHERE id NOT IN (SELECT favicon_id FROM moz_places);"
sqlite3 places.sqlite "DELETE FROM moz_annos WHERE anno_attribute_id IN (SELECT id FROM moz_anno_attributes WHERE name = 'google-toolbar/thumbnail-score' OR name = 'google-toolbar/thumbnail');"

上述指令的作用是,將 places.sqlite 內瀏覽次數小於 2 次的紀錄刪除,但保留常去的網站(瀏覽三次以上),使 Awesome Bar 的威力不至於打折。最後一行鎖定了 Google Toolbar 的記錄來刪除。


此時需要先打開 Firefox,再關閉 Firefox。確認完全關閉後再繼續進行下一步。


sqlite3 places.sqlite "VACUUM;"

完成之後,你的收藏庫就減肥完成啦。經過減肥之後,我的收藏庫居然從 414MB 降到只剩 5MB!


清理Firefox 3肥大的places.sqlite成果 v2

再打開收藏庫看看,只剩下 2643 個項目。刪去了佔 9 成的那些不到兩次的瀏覽紀錄,成功的使 Firefox 3 回復該有的速度。


清理Firefox 3肥大的places.sqlite 04

很多朋友問到,這樣作跟使用 Firefox 內建的「清除隱私資料…」有什麼不同?最主要的差別是:清除隱私資料,會把所有的瀏覽紀錄清光光,我卻只想清除無用的那些紀錄,保留有用的部份。此外,清除隱私資料→清除瀏覽紀錄後,需要等 Firefox 在閒置時執行 vacuum ,完畢才會縮小 places.sqlite 的檔案大小,不會立即縮小。


有些人想要徹底擺脫 places.sqlite 這個檔案,但是除了瀏覽歷史外,此檔案中還存有各網站的 favicon 快取,及擴充套件的資料……等,因此 Firefox 3 沒辦法不使用這個檔案。但是我們可以透過調整 about:config 的參數來控制 Firefox 3 對瀏覽歷史的儲存動作:


about:config
browser.history_expire_sites 瀏覽歷史中保留的網站數目,預設是 40000 個
browser.history_expire_days 瀏覽歷史的最長保留天數,預設是 180 天
browser.history_expire_days_min 瀏覽歷史的最短保留天數,預設是 90 天

然後把 places.sqlite 刪掉(記得先備份)即可讓 Firefox 3 自動重建此檔案。


撰文:Irvin

5 則留言:

  1. 利用您文章中的信息,写出批处理一个,希望给怕麻烦的朋友分享。
    地址:

    http://www.firefox.net.cn/newforum/viewtopic.php?t=26765

    回覆刪除
  2. 參考樓主的方法, 改成以下, 也可以成功瘦身
    (1) 安裝 Firefox addon SQLite Manager(2) 然後在 Firefox 用 SQLite Manager 打開 places.sqlite
    (3) 用 SQLite Manager 裡面的 Execute SQL 執行樓主提供的 sqlite3 places.sqlite 後面的雙引號之內的內容 (不含雙引號) 直到 VACUUM;

    回覆刪除
  3. 樓上寫的方法我試過,(2)會出現錯誤無法開啟...
    還是說我漏掉了什麼? 請指教~

    回覆刪除
  4. Irvin 真是強阿~
    我都直接砍掉 profile 重練~

    回覆刪除
  5. 想請問一下
    肥大使得系統變慢的原因
    是因為資料庫太慢所以search hit 的成功慮變低
    所以變慢

    還是因為佔記憶體
    造成system performance 變慢@@?

    我這方面的觀念有點模糊 ^^"

    回覆刪除