How can I remove OLD history from Google Chrome?
I'm working on a laptop with a modest hard drive, and 500MB is taken up with Google Chrome "History Index" and "Thumbnails" files. Some of these files are a year old. Chrome offers me the option to remove recent history, but I want the opposite: I want to remove old history. (Ideally I would remove the least recently used history information, but I don't expect to be able to do that.)
Anyone have any ideas? I'm running the standard Debian google-chrome-beta
package.
Shameful to Google, there is no way yet.
Besides that, all the Chrome databases are just sqlite3 files, and you can use sqlite3 to purge unneeded entries. First, install the sqlite3
client (sudo apt-get install sqlite3
), and then go to Chrome config (should be .config/chrome/Default
).
Here is an SQL snippet which purges old URLs from history (works on databases History
, Archived History
):
delete from urls where last_visit_time <= (strftime('%s',(select
max(last_visit_time)/10000000 from urls),'unixepoch','-1 days')*10000000);
Here is another one which will probably work on Thumbnails
database:
attach database 'History' as history;
delete from thumbnails where last_updated <= (strftime('%s',(select
max(last_visit_time)/10000000 from history.urls),'unixepoch','-1 days')
*10000000);
This will probably work on History Index
-es:
attach database 'History' as history;
delete from info i, pages_content pc where i.time <= (strftime('%s',(select
max(last_visit_time)/10000000 from history.urls),'unixepoch','-1 days')*
10000000) and i.rowid = pc.rowid;
Of course you should backup all the databases, because you may have different version of Chrome, or I may accidentally miss a symbol, etc.
As Chrome stores its times in some weird format based on UNIX Epoch (but multiplied by 10^7 and shifted to the future), system functions returning date cannot be used; the date of last page opening is used instead.
You can replace -1 days
with any interval you want; you can read about allowed modifiers in SQLite documentation (shortly: -N days
, -N months
).
After removing unneeded data, you may want to issue vacuum;
command which shrinks the database even further.
(This is not an answer, but I'm leaving it up as a warning.)
I've seen two extensions that claim to do this in some way, but neither works.
- Click2Clear History only deletes recent items. (Or tries to.)
- History limiter deletes old items each time you visit the history.
However these (and I expect other extensions) only call
chrome.history.deleteRange
— if you're lucky, with reasonable parameters. According to the documentation:
Removes all items within the specified date range from the history. Pages will not be removed from the history unless all visits fall within the range.
And in practice, I can't see any effect, beyond (I think) pages not appearing in the history page. In particular the history database file is still large, and Chrome still makes a lot of IO to it. So I suspect (from very casual observation with Chromium 9 beta r68937) that chrome.history.deleteRange
only affects what's visible in the chrome://history
page and not what's stored on the disk and affects things like URL bar completion.