【问题标题】:Sqlite : Locking the database file for write operationSqlite:锁定数据库文件以进行写操作
【发布时间】:2015-03-18 17:58:14
【问题描述】:

我对 SQLite 有以下问题。

  1. 当我进行写操作时,sqlite 是锁定整个数据库文件还是只锁定特定的表?

  2. 假设我有一些数据库,我启动了一个begin,然后我执行了数百万次写入操作。所以,我知道为这百万次操作创建了一个-journal 文件。问题是:数据库(非日志)文件会在我提交之前被锁定,还是这些事务在日志文件中并行继续,仅在我提交时锁定表一段时间?

编辑

如果我启动 begin 并且 commit 会在 50 秒后出现。那么当DB开始提交时,文件会在开始时或之后的50秒后被锁定吗?

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    SQLite 总是锁定整个数据库。

    该文件仅在 SQLite 实际需要写入时才被锁定,但如果您执行数百万次操作肯定会发生这种情况,因为更改将不适合缓存。 (DB文件在第一次写入时被锁定,在事务结束时解锁。)

    【讨论】:

    • 假设我做了大约 1000 个可以放入缓存的事务。那会发生什么?它只会在提交时锁定文件吗?
    • 每次提交都会写入。
    • 这是否意味着它不会锁定 begin-commit 内部的单个写入操作,而只会锁定提交?
    • 对不起,如果我不能表达我的疑问。我想知道,如果我开始 begin 并且 commit 会在 50 秒后出现。那么当数据库开始提交时,文件会在开始时或之后的 50 秒后被锁定吗?
    • 这取决于您使用的kind of BEGIN
    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2011-10-30
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多