pangyf10
火狐狸
火狐狸
  • UID48425
  • 注册日期2014-12-30
  • 最后登录2023-01-08
  • 发帖数202
  • 经验206枚
  • 威望0点
  • 贡献值70点
  • 好评度9点
  • 社区居民
  • 忠实会员
阅读:2671回复:14

firefox删除大量历史记录时非常卡

楼主#
更多 发布于:2015-12-22 16:42
firefox删除大量历史记录时非常卡。
尤其是数量达到10000后,不知为何firefox是300条300条的删除,数量一旦上万,开头每300条卡个10分钟都可能。处理器3代i3,还跟的上时代。
是sqlite的问题,还是firefox的问题?

最新喜欢:

livelifeliveli...
pcxfirefox
千年狐狸
千年狐狸
  • UID39042
  • 注册日期2012-06-22
  • 最后登录2018-01-15
  • 发帖数2539
  • 经验1263枚
  • 威望2点
  • 贡献值242点
  • 好评度133点
  • 最爱沙发
  • 忠实会员
  • 社区居民
1楼#
发布于:2015-12-22 17:00
2年前就报告了 包含了2个问题
1) 算法问题 删除算法太慢
2)可恶的巨大的wal文件 产生额外的高IO占用
http://pcxfirefox.wordpress.com/
yfdyh000
千年狐狸
千年狐狸
  • UID29079
  • 注册日期2009-06-07
  • 最后登录2022-05-18
  • 发帖数2262
  • 经验1390枚
  • 威望0点
  • 贡献值52点
  • 好评度139点
  • 社区居民
  • 最爱沙发
  • 忠实会员
2楼#
发布于:2015-12-22 17:32
补充,楼上说的应该是这个 https://bugzilla.mozilla.org/show_bug.cgi?id=734643 及其依赖。
pangyf10
火狐狸
火狐狸
  • UID48425
  • 注册日期2014-12-30
  • 最后登录2023-01-08
  • 发帖数202
  • 经验206枚
  • 威望0点
  • 贡献值70点
  • 好评度9点
  • 社区居民
  • 忠实会员
3楼#
发布于:2015-12-22 18:13
yfdyh000:补充,楼上说的应该是这个 https://bugzilla.mozilla.org/show_bug.cgi?id=734643 及其依赖。回到原帖
https://bugzilla.mozilla.org/show_bug.cgi?id=1117546。今年还有人继续提出呢。看了下最晚06年就有相关问题。
此外我这里是固态硬盘,io方面应该没有问题。
yfdyh000
千年狐狸
千年狐狸
  • UID29079
  • 注册日期2009-06-07
  • 最后登录2022-05-18
  • 发帖数2262
  • 经验1390枚
  • 威望0点
  • 贡献值52点
  • 好评度139点
  • 社区居民
  • 最爱沙发
  • 忠实会员
4楼#
发布于:2015-12-22 18:34
pangyf10:https://bugzilla.mozilla.org/show_bug.cgi?id=1117546。今年还有人继续提出呢。看了下最晚06年就有相关问题。
此外我这里是固态硬盘,io方面应该没有问题。
回到原帖
标重复了,看上去一样。早期的一些问题是已修复(FIXED)或者未重现(WORKSFORME)的状态。
不止IO的问题,好像是算法上的问题,CPU压力。
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-04-19
  • 发帖数18482
  • 经验4836枚
  • 威望5点
  • 贡献值4316点
  • 好评度1115点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
5楼#
发布于:2015-12-23 10:00
CPU和磁盘占用率都比较高
Firefox More than meets your experience
arsenal520
小狐狸
小狐狸
  • UID50403
  • 注册日期2015-07-05
  • 最后登录2017-10-30
  • 发帖数27
  • 经验37枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 社区居民
  • 忠实会员
6楼#
发布于:2015-12-23 11:44
我的是完全動不了,都是用CCleaner來清理的
pcxfirefox
千年狐狸
千年狐狸
  • UID39042
  • 注册日期2012-06-22
  • 最后登录2018-01-15
  • 发帖数2539
  • 经验1263枚
  • 威望2点
  • 贡献值242点
  • 好评度133点
  • 最爱沙发
  • 忠实会员
  • 社区居民
7楼#
发布于:2015-12-23 12:59
好吧 我说下简单的解决方案 直接基于Sqlite来删除 我一般都是这样大规模删减的

为方便起见(你可以用别的工具),使用这个扩展https://addons.mozilla.org/zh-CN/firefox/addon/sqlite-manager/  

打开SQLite Manager 定位到places.sqlite 点击Go
左边就会出现数据库中所有的表 选择你想要清空的表 比如历史记录是moz_historyvisits 右键选择Empty即可
如果部分删除 可以在右侧选择 还可以在Excute SQL中输入你想要执行的SQL语句 进行精确批量删除
清除其他东西同理 最后使用SQLite Manager菜单的Database里的Compact即可
http://pcxfirefox.wordpress.com/
pangyf10
火狐狸
火狐狸
  • UID48425
  • 注册日期2014-12-30
  • 最后登录2023-01-08
  • 发帖数202
  • 经验206枚
  • 威望0点
  • 贡献值70点
  • 好评度9点
  • 社区居民
  • 忠实会员
8楼#
发布于:2015-12-23 14:38
pcxfirefox:好吧 我说下简单的解决方案 直接基于Sqlite来删除 我一般都是这样大规模删减的

为方便起见(你可以用别的工具),使用这个扩展https://addons.mozilla.org/zh-CN/firefox/addon/sqlite-m...
回到原帖

不错的办法。
以前没有发现compact功能。。。
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
9楼#
发布于:2015-12-23 15:40
pcxfirefox:好吧 我说下简单的解决方案 直接基于Sqlite来删除 我一般都是这样大规模删减的

为方便起见(你可以用别的工具),使用这个扩展https://addons.mozilla.org/zh-CN/firefox/addon/sqlite-m...
回到原帖
既然lz用SSD, 物理方面没问题;你的方法直接操作数据库, 也没有问题...为啥由fx来做同样的事情就慢如龟爬了....
-いたんですか? -ええ、ずっと
yfdyh000
千年狐狸
千年狐狸
  • UID29079
  • 注册日期2009-06-07
  • 最后登录2022-05-18
  • 发帖数2262
  • 经验1390枚
  • 威望0点
  • 贡献值52点
  • 好评度139点
  • 社区居民
  • 最爱沙发
  • 忠实会员
10楼#
发布于:2015-12-23 15:54
白左:既然lz用SSD, 物理方面没问题;你的方法直接操作数据库, 也没有问题...为啥由fx来做同样的事情就慢如龟爬了....回到原帖
可能是操作数据库的方式很笨(频繁检查/循环/逐个操作,并会逐个保存),也可能是非异步被UI更新阻止了。没研究过,只是猜测。
pangyf10
火狐狸
火狐狸
  • UID48425
  • 注册日期2014-12-30
  • 最后登录2023-01-08
  • 发帖数202
  • 经验206枚
  • 威望0点
  • 贡献值70点
  • 好评度9点
  • 社区居民
  • 忠实会员
11楼#
发布于:2015-12-23 16:41
yfdyh000:可能是操作数据库的方式很笨(频繁检查/循环/逐个操作,并会逐个保存),也可能是非异步被UI更新阻止了。没研究过,只是猜测。回到原帖
这个可能和情景有关。
当我通过firefox来删除历史记录的时候,过程是先选择一个时间的历史记录(firefox似乎不能选中所有记录),然后按访问次数排序,然后选中低于某一个数的所有记录,然后删除。这种方式下firefox一般的逻辑可能是按我选中的记录(或者搜索的记录),一条一条(通过名字吧,一般不会是id吧,毕竟我在选择的时候只能看到名字这些东西,而不是数据库操作的抽象的东西),这样就每一次删除都必须经过不同的搜索、删除。
但是当直接操作数据库的时候,可以明确条件,一次性检索出来,一次性删除。
情景设计上firefox不知道我选择的上万条记录是有内在联系的,但操作数据库的时候我可以告诉数据库。这样一个是一万次独立操作,一个单次的操作。差别就很大了。

如果是这样的话就建议firefox增强一下历史记录的管理。增加一些逻辑性的选择,比如我这种删除仅仅访问过一次的记录,以及给访问记录设个上限(我不觉得一个网站被记录500次和500万次有什么区别,使用上都会马上被检索到),或者有一定的自动删除功能等等。
yfdyh000
千年狐狸
千年狐狸
  • UID29079
  • 注册日期2009-06-07
  • 最后登录2022-05-18
  • 发帖数2262
  • 经验1390枚
  • 威望0点
  • 贡献值52点
  • 好评度139点
  • 社区居民
  • 最爱沙发
  • 忠实会员
12楼#
发布于:2015-12-23 16:47
pangyf10:这个可能和情景有关。
当我通过firefox来删除历史记录的时候,过程是先选择一个时间的历史记录(firefox似乎不能选中所有记录),然后按访问次数排序,然后选中低于某一个数的所有记录,然后删除。这种方式下firefox一般的逻辑可能是...
回到原帖
嗯,应该就是这样,非全选状态变成遍历了,而且算法设计很差,变成了若干次查询和提交数据库。肯定是通过ID吧,列表项可以有隐藏数据的。
pangyf10
火狐狸
火狐狸
  • UID48425
  • 注册日期2014-12-30
  • 最后登录2023-01-08
  • 发帖数202
  • 经验206枚
  • 威望0点
  • 贡献值70点
  • 好评度9点
  • 社区居民
  • 忠实会员
13楼#
发布于:2015-12-23 16:54
yfdyh000:嗯,应该就是这样,非全选状态变成遍历了,而且算法设计很差,变成了若干次查询和提交数据库。肯定是通过ID吧,列表项可以有隐藏数据的。回到原帖
由于呈现在我们面前的是一个已经经过查询的结果,而不是数据库中的一个表。当我们选择某一项,或者某几项的时候,或许简单的逻辑以及实现是根据我们提供的信息,也就是展现在我们眼前的信息中的一部分,再去表中查询,以此来确认我们选中的到底是哪个表中的哪些项。这个情景本身就比较复杂。相对于在数据库中,我们直接看到表的时候本身没有经过这些复杂的过程,就是依据表、id这些抽象的东西直接处理,就快很多。
atmouse
狐狸大王
狐狸大王
  • UID44114
  • 注册日期2014-01-27
  • 最后登录2017-12-29
  • 发帖数325
  • 经验266枚
  • 威望0点
  • 贡献值122点
  • 好评度19点
14楼#
发布于:2015-12-23 16:57
dba说,你的sqlite需要建索引。。。。^_^
PC-JMK6, asus m5a99x, fx8350, radeonhd7870 x2, iec958/ha/HD600, linux-next, systemd, pacman, mesa, xorg, libinput, modesetting w/ glamor, qtile, icecat,
游客

返回顶部