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

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

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

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

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

  • 思源笔记

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

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

    22340 引用 • 89396 回帖 • 1 关注
1 操作
fangly 在 2021-11-23 11:04:23 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • fangly 1

    又出现内核连接中断,这一次和上面的不太一样,没有剪切和新建操作

    我是先从一个文档的反链面板点击跳转到另一个文档,然后有做折叠展开操作,之后就内核连接中断了

    I 2021/11/29 01:29:34 transaction.go:110: tx [2553ms]
    E 2021/11/29 01:29:39 block_query.go:491: query scan field failed: sql: transaction has already been committed or rolled back
    E 2021/11/29 01:29:39 block_query.go:491: query scan field failed: sql: Rows are closed
    F 2021/11/29 01:30:25 transaction.go:76: transaction failed: %!s(<nil>)
    
    1 回复
  • 其他回帖
  • fangly

    日志里又发现了新东西:

    W 2021/11/25 19:20:54 conf.go:371: data is writing: 
    goroutine 20570 [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.Outline({0xc00129c030, 0x16})
    	D:/88250/siyuan-src/kernel/model/outline.go:16 +0x3e
    github.com/siyuan-note/siyuan-src/kernel/api.getDocOutline(0xc001028600)
    	D:/88250/siyuan-src/kernel/api/outline.go:28 +0xf8
    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(0xc001028600)
    	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(0xc001028600)
    	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, 0xc001028600)
    	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(0xc001028600)
    	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, 0xc001028600)
    	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, 0xc000cb62a0}, 0xc001028200)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/gin.go:445 +0x1c5
    net/http.serverHandler.ServeHTTP({0x21d0708}, {0x21d4348, 0xc000cb62a0}, 0xc001028200)
    	D:/go1.17/src/net/http/server.go:2878 +0x43b
    net/http.(*conn).serve(0xc00035af00, {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
    

    我的复现方式是:复制一个文档块引用,粘贴,这时候 CPU 占用很高,应该是在后台计算,这个时候鼠标马上移动到某个引用块上,这时候后台还在计算,引用块是没有反应的。然后日志中就会有上面的内容。

    类似这样操作:

    temp111.gif

    1 回复
  • fangly

    我没太理解,好像说的不是一个问题 😂

    帖子中的第二个问题可能和“数据是否变动”有关

    但第一个问题和这个没关系吧,无论“数据是否变动”,都没有请求的意义吧,可以看下面这个录屏,我反链面板都关了,打开一个有 199 个反链的文档后,CPU 开始高占用,开始计算反链,这里的计算请求没有必要吧:

    现在时不时地因为后台计算导致引用块悬浮窗没反应,引用块搜索没反应,要等老半天,而且出现频率很高,有点严重影响使用了,相比 1.4.6 以前,体验流畅度差了不少 😭

    1 回复
    3 操作
    fangly 在 2021-11-23 14:39:26 更新了该回帖
    fangly 在 2021-11-23 14:36:43 更新了该回帖
    fangly 在 2021-11-23 14:35:00 更新了该回帖
  • 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 回复
  • 查看全部回帖

推荐标签 标签

  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 477 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    86 引用 • 122 回帖 • 625 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 16 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 680 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 431 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    125 引用 • 169 回帖 • 1 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 2 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    176 引用 • 815 回帖
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 113 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 303 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 175 关注
  • 创业

    你比 99% 的人都优秀么?

    84 引用 • 1399 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    351 引用 • 1814 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    567 引用 • 3532 回帖
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    55 引用 • 85 回帖 • 2 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 43 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    8 引用 • 30 回帖 • 407 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 628 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    88 引用 • 1235 回帖 • 411 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖 • 2 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    169 引用 • 506 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖