反链面板计算逻辑与性能问题

本贴最后更新于 1095 天前,其中的信息可能已经物是人非

打开软件,不开反链面板,打开一个有上百个反链的文档后,使用正常,此时后台没有在计算反链。

然后打开一下反链面板,之后马上关上,过一会儿再打开一个有上百个反链的文档,理论上来说,这时候我没有打开反链面板,后台应该不会计算这个文档的反链,然而事实上,此时后台确实在计算反链,CPU 占用一直在 20% 以上,所有和引用块相关的功能都不能用,等到 CPU 占用降低到 5% 以下时,我打开反链面板,发现 200 个反链秒出现,说明当时后台确实在计算反链,这是不符合预期的。

此外另一个问题(与上面的问题无关),我开着反链面板,然后我依次点开 10 个文档,后台会依次计算这 10 个文档的反链,好像有 10 个计算任务的队列,得等这 10 个任务全部出队之后才会释放资源,那么,如果我在两个有几百个反链的文档之间反复点击,一下打开这个文档,一下打开另一个文档,那么这个队列将会入队一堆计算任务,假设我在两个文档之间反复点击 10 次,将会入队 20 个计算任务,假设计算两个文档的反链分别都需要 10 秒钟,那么将有 200 秒钟的时间资源被占用,这 200 秒钟 CPU 占用很高,且所有的引用块功能都用不了,处于“假死”状态,这是灾难级的性能问题,而且事实上,这 20 个任务的队列里面,只有最后 1 个任务是有用的,前 19 个任务都是没有意义的,在我打开另一个文档后,当前文档的反链计算任务完全可以直接终止。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22353 引用 • 89454 回帖
1 操作
fangly 在 2021-11-23 11:04:23 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 收到,我们会在 1.5.5 内测阶段解决。

    1 回复
  • 其他回帖
  • fangly

    有的貌似和大纲没有关系:

    W 2021/11/25 19:27:22 conf.go:371: data is writing: 
    goroutine 24469 [running]:
    runtime/debug.Stack()
    	D:/go1.17/src/runtime/debug/stack.go:24 +0x65
    github.com/siyuan-note/siyuan-src/kernel/model.WaitForDataWriting()
    	D:/88250/siyuan-src/kernel/model/conf.go:371 +0x77
    github.com/siyuan-note/siyuan-src/kernel/model.GetDoc({0xc0004ca330, 0x16}, 0x0, {0x0, 0x0}, 0x0, 0xc0006ab5d0)
    	D:/88250/siyuan-src/kernel/model/file.go:317 +0x66
    github.com/siyuan-note/siyuan-src/kernel/api.getDoc(0xc000636c00)
    	D:/88250/siyuan-src/kernel/api/filetree.go:525 +0x2d1
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/siyuan-note/siyuan-src/kernel/model.CheckAuth(0xc000636c00)
    	D:/88250/siyuan-src/kernel/model/session.go:94 +0x467
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/gin-contrib/sessions.Sessions.func1(0xc000636c00)
    	D:/gogogo/pkg/mod/github.com/gin-contrib/sessions@v0.0.3/sessions.go:52 +0x18d
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/gin-contrib/gzip.(*gzipHandler).Handle(0xc0007ac0f0, 0xc000636c00)
    	D:/gogogo/pkg/mod/github.com/gin-contrib/gzip@v0.0.3/handler.go:60 +0x2ed
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/gin-gonic/gin.CustomRecoveryWithWriter.func1(0xc000636c00)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/recovery.go:99 +0x82
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0002d81a0, 0xc000636c00)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/gin.go:489 +0x63e
    github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0002d81a0, {0x21d4348, 0xc000138540}, 0xc000636b00)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/gin.go:445 +0x1c5
    net/http.serverHandler.ServeHTTP({0x21d0708}, {0x21d4348, 0xc000138540}, 0xc000636b00)
    	D:/go1.17/src/net/http/server.go:2878 +0x43b
    net/http.(*conn).serve(0xc00071e0a0, {0x21df640, 0xc0007ddcb0})
    	D:/go1.17/src/net/http/server.go:1929 +0xb08
    created by net/http.(*Server).Serve
    	D:/go1.17/src/net/http/server.go:3033 +0x4e8
    
    1 回复
  • fangly

    现在一回车就显示:

    image.png

    重建索引后,在文档中再回车一下,又显示状态异常,再重建索引,再回车,又显示状态异常,一直循环

    temp113.gif

    试了下,在某些文档中回车没问题,在某些文档中回车一直会显示状态异常

    再试了下,关闭“启动时优先使用已有数据库”,重新打开思源,原先回车会显示状态异常的文档,回车后不会显示状态异常,我猜是数据库有点问题

    相关日志:

    log.zip

    貌似发现问题所在了:我使用 alt+b 打开文档 A 的反向链接后(该文档的反向链接内容较多,在反链内容较少的文档中试了下貌似不能复现),在其他文档或者文档 A 中回车,会出现这种情况。估计是对 alt+b 的反链面板的处理有些问题,我看 alt+b 的反链面板和 alt+7 的反链面板并不是同步的,alt+7 的已经加载出来了,打开 alt+b 仍然需要一定时间加载,看起来两者的数据并不共享

    但也不是必复现,又试了下复现不出来,不知道还有什么先决条件,但应该和 alt+b 的反链面板有很大的关系

    1 回复
    5 操作
    fangly 在 2021-12-02 15:56:05 更新了该回帖
    fangly 在 2021-12-02 15:54:29 更新了该回帖
    fangly 在 2021-12-02 15:51:13 更新了该回帖
    fangly 在 2021-12-02 15:50:00 更新了该回帖 fangly 在 2021-12-02 15:47:26 更新了该回帖
  • fangly

    alpha2 事务实现改了之后我觉得舒服了很多,但反链面板的性能上我体验下来感觉还是有提升空间

    200 个反链的文档第一次加载的时候比 alpha1 快一些,但还是要差不多 8 秒钟才能加载出来,第一次加载时候的时间不知道能否再压榨得短一些 😂

    第一次 8 秒钟加载出来后,打开别的文档,再返回来,反链面板能秒出现,这部分应该是 alpha2 新优化的,这个非常舒服,我猜是检查了“数据是否变动”,没变动就不请求了?

    但是过几分钟后再打开这个有 200 个反链的文档又要 8 秒钟加载,这个几分钟我也不清楚是多久,有时候有的文档上百个反链几分钟后仍然秒加载,但有时候有的文档几分钟后又要好久才能加载(都没有修改过,没有数据变动),不知道这里是不是有 bug?

    1 回复
  • 查看全部回帖

推荐标签 标签

  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 588 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 67 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖 • 1 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖 • 1 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 168 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 743 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 6 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 510 关注
  • gRpc
    11 引用 • 9 回帖 • 73 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 3 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • 创业

    你比 99% 的人都优秀么?

    84 引用 • 1399 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    149 引用 • 257 回帖
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 762 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    132 引用 • 1114 回帖 • 124 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 9 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 699 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 587 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 453 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 2 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 608 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 164 关注