gpt4 book ai didi

SQLite WAL 与 C# Entity Framework

转载 作者:行者123 更新时间:2023-12-03 03:04:13 24 4
gpt4 key购买 nike

出于某种原因,我的主机似乎只能在设置为 WAL 模式时更新我的​​ SQLite 数据库。因此,使用“DB Browser for SQLite”我将 Pragma Journal Mode 编辑为 WAL,一切似乎都正常。

我的数据库现在为 1Mb,但附带的 WAL 文件为 4Mb。这是预期的吗?我一直在尝试阅读 Pragma 选项 ( https://www.sqlite.org/pragma.html#pragma_journal_mode ),但目前它似乎超出了我的理解范围。

WAL 文件显然是在“检查点”之前使用的

使用实体我执行以下操作:

public DbSet<ProductModel> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(@"Filename=" + dbPath);
}

using (ProductDB db = new ProductDB())
{
db.Products.Update(testModel);

try
{
db.SaveChanges();
}
}

我应该做一些额外的事情来提交任何更改并重置检查点吗?我的 WAL 文件会持续增长,还是始终与数据库文件大小相关?

谢谢

最佳答案

Is this expected?

是的。 WAL 基本上与日志模式相反,存储尚未应用于数据库文件的更改。

即使用 WAL 时,更改不会写入数据库文件,而是写入 -wal 文件。当发生检查点(前滚)时,更改将写入数据库文件并有效地从 -wal 文件中删除(但不一定释放磁盘空间)。

-wal 实际上是数据库的一部分,即在访问底层数据库之前将从 -wal 文件中提取数据(如果数据不在 -wal 文件中)。

如果发生回滚,则原则上可以删除/删除 -wal 文件,并且回滚完成。

在 JOURNAL 模式下,更改将写入数据库文件并记录在 -journal 文件中。回滚会撤消更改。

Is there something extra I should be doing to commit any changes and reset a checkpoint?

关闭数据库应该检查点,您也可以使用 PRAGMA schema.wal_checkpoint 强制检查点否则自动检查点适用(大约在 1000 页后)。

Will my WAL file keep growing, or is it always relative to the database filesize?

不,它不会继续增长,但会直到检查点发生为止。它与数据库大小无关,而是与所应用的更改(事务)相关。大小取决于数据库的页面大小,因为 -wal fil 存储更改的页面。因此,较小的页面大小可能会导致较小的 -wal 大小,但可能会存储更多的页面和更大的磁盘访问量。

关于SQLite WAL 与 C# Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58105392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com