- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
SQLite 文档说 ( here ) 您可以通过在单独的线程上运行检查点来避免 WAL 模式下的检查点暂停。我尝试了这个,但它似乎没有工作:'-wal
' 文件无限增长,不清楚是否有任何东西实际上被复制回主数据库文件,并且(最重要的是) 在 -wal
文件变得足够大(超过 1 GB)后,主线程开始不得不等待检查指针。
在我的应用程序中,主线程不断地做一些与此基本相同的事情,其中 generate_data
将吐出要插入的一百万行的顺序:
db = sqlite3.connect("database.db")
cursor = db.cursor()
cursor.execute("PRAGMA wal_autocheckpoint = 0")
for datum in generate_data():
# It is a damned shame that there is no way to do this in one operation.
cursor.execute("SELECT id FROM strings WHERE str = ?", (datum.text,))
row = cursor.fetchone()
if row is not None:
id = row[0]
else:
cur.execute("INSERT INTO strings VALUES(NULL, ?)", (datum.text,))
id = cur.lastrowid
cursor.execute("INSERT INTO data VALUES (?, ?, ?)",
(id, datum.foo, datum.bar))
batch_size += 1
if batch_size > batch_limit:
db.commit()
batch_size = 0
检查点线程执行此操作:
db = sqlite3.connect("database.db")
cursor = db.cursor()
cursor.execute("PRAGMA wal_autocheckpoint = 0")
while True:
time.sleep(10)
cursor.execute("PRAGMA wal_checkpoint(PASSIVE)")
(在单独的线程上,它们必须与数据库有单独的连接,因为 pysqlite 不支持在多个线程之间共享连接。)更改为 FULL 或 RESTART 检查点没有帮助 - 然后检查点只会失败。
我如何让它真正发挥作用? Desiderata 是:1) 主线程永远不必等待,2) 日志文件不会无限制地增长。
最佳答案
检查点需要锁定整个数据库,因此所有其他读取和写入都必须被阻止。(被动检查点只是中止。)
因此在单独的线程中运行检查点并不会增加并发性。(SQLite 文档仅建议这样做,因为主线程可能未设计为在空闲时刻处理检查点。)
如果你不断地访问数据库,你就不能检查点。如果您的批处理操作使 WAL 文件变得太大,您应该在该循环中插入显式检查点(或依赖自动检查点)。
关于python - SQLite WAL 模式,后台线程检查点,wal-journal 永不收缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22673833/
基本上,正如标题所问: Journal 属性有什么意义? MSDN 并没有真正解释它的实际用途。 最佳答案 blog post 很好地解释了这一点,或上官方MSDN page . 总结一下: Wind
我有一个 javascript 文件journal.js,其中包含以下内容: require('./fixtures/journal-data'); if (typeof module != "und
我很好奇有关日志记录步骤的干扰器最常见(或推荐)的实现。我最常见的问题是: 它是如何实际实现的(通过示例)? 使用 JPA 是否明智? 通常使用什么数据库(已经使用 disruptor 实现项目的社区
我的想法是,SQLite 日志只会在有未决操作时保留在文件系统中。 但是,在我看来,至少在 Android 4.1+ 中,正常行为是 SQLite 日志保留在文件系统中,即使在将事务设置为成功/结束,
我正在使用 SQLite 和一个在后台运行的 php 应用程序。我已经使用 (Ctrl-c) 阻止了应用程序,我只是注意到我有 database.sqlite 和 database.sqlite-jo
在我的 Android 应用程序的数据库目录 (/data/data/com.me.myApp/databases) 中,对于我创建的每个 sqlite 数据库,都有一个相应的同名数据库,并在其名称后
我正在尝试在 MarkLogic 中设置带有日志归档的增量备份,但我很难在管理界面中找到“purge-journal-archiving”设置。为了进行此设置,“purge-journal-archi
当我这样做时,当我运行 build.xml 并部署时它不会编译, 我想这样做,因为它看起来比使用 JournalArticleLocalServiceUtil.addArticle 的巨大方法调用要好
什么时候 sqlite 的持久日志模式成为 Android 中的默认日志模式? 我知道日志模式在 Android 4.1.1 (API 16) 版本中发生了变化。但它并不准确。因为发行说明不包含此信息
例如我有一个问题: issue = redmine.issue.get(100) 是否可以获取特定用户对此问题的注释? 我找到了journals.filter方法: issue.journals.fi
Shred 文档说 shred “不能保证有效”(见底部)。因此,如果我在我的 Ext3 文件系统或 Raid 上粉碎文档,会发生什么?我是否切碎了文件的一部分?它有时会撕碎整个东西,有时不会吗?能撕
我想从访客的结帐页面中删除电子邮件字段,我使用 打开购物车 3 与主题 期刊 3 .那我能做什么? 我试过从 呼唤它 guest .php 但还是不行。 最佳答案 您不能只删除电子邮件字段。许多系统属
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我有一个 sqlite3 DB,我需要在只读文件系统上读取(而不是写入)。还有一个与数据库关联的 -journal 文件,它会干扰打开数据库,因为 sqlite 代码想要做的第一件事就是删除该 -jo
清理快照存储中的旧快照很容易:在每个成功的快照之后,actor 都会收到一个 saveSnapshotSuccess元数据指示其序列号,此信息可用于构建快照SnapshotSelectionCrite
我正在尝试从 NSManagedObjects var journals = [NSManagedObject]() 数组中获取单个实体,并将其显示在详细信息页面上。我目前通过在从 didSelect
我正在更改开放期刊系统的 CSS 代码。在侧栏上,有一些包含一些部分的 div。其中之一在底部包含三个关于更改页面字体大小的链接(更大的字体大小-默认字体大小-更小的字体大小)。链接布局是使用 并排进
我在使用 C(Linux RHEL5,64 位)中的 sqlite3 API 从崩溃中恢复时遇到问题,我只剩下一个 .db 和一个 .db -journal 文件。 如果我用 sqlite3 二进制本
各位程序员大家好。 我正在尝试使用 WinIoCtl 函数转储 NTFS 分区的 USN 日志的内容。我的 *USN_JOURNAL_DATA* 结构告诉我它的最大大小为 512 MB。我已将其与 f
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!