objectbox - 对象框 DbMaxReadersExceededException
问题描述
ObjectBox 版本 2.7.1,MaxNumReaders 500,@Entity 计数超过 50,一些实体有超过 100K 行。发布两周后,我们开始在 Sentry 中遇到错误:无法开始读取事务(已达到最大读取事务) 如何使用调试器在早期阶段诊断问题?
解决方案
当您遇到 DbMaxReadersExceededException 时,通常可以通过检查以下选项来解决问题:
因为您已经增加了最大读者值,所以我假设您使用多个线程。我要做的第一件事是验证您的线程逻辑。我们已经看到应用程序无限制地产生线程并因此破坏读者的情况。访问 ObjectBox DB 时,每个线程都需要一个阅读器。因此,获得 DbMaxReadersExceededException 可能是线程代码中出现问题的征兆。
如果你有很多短期线程,你可能会看到类似“W/Box: Skipping low-level close for read-only cursor (non-creator thread)”或“Hint: use closeThreadResources() to avoid finalizing recycle交易”。后一个提示正是您在线程退出之前应该做的事情。如果你只使用了一个或两个
Box
es,你可以调用 box: 上的方法box.closeThreadResources()
,否则 BoxStore 还提供了一个同名的方法来为所有的 Box 做这个。目前还有一个与未绑定线程池相关的未解决问题。如果遇到这种情况,当前的解决方法是使用具有上限的线程池。
推荐阅读
- powershell - Powershell 计算属性和 Tee 对象/变量
- javascript - 无法访问来自 JSON 接收标题的数据未定义
- flutter - 从地图中删除项目
飘飘然 - python - 如何从python中的文本文件中挑选出特定的单词?
- python - 如何在大括号内的大括号内提取字符串 - 必须是 REGEX 和 PYTHON
- php - 将输入数据从一个视图传递到 Laravel 中的另一个视图
- javascript - 使用 `.js` 文件从 `.mdx` 文件中读取 `frontmatter` 的值
- azure - 使用 azure b2c、MFA 和 REST API 时如何重置 MFA 并获取新的 QR
- java - 为什么来自不同布局文件的 textView 不能正确运行 setText 而来自 activity_main 的 textViews 会?
- vue.js - 在 Nuxt Js SSR 中保存本地存储中的角色是否安全?