SqlCE 刷新间隔 - 默认设置会导致损坏吗?
Posted
技术标签:
【中文标题】SqlCE 刷新间隔 - 默认设置会导致损坏吗?【英文标题】:SqlCE Flush Interval - Will the default setting lead to corruption? 【发布时间】:2010-06-11 16:51:25 【问题描述】:SqlCE 在 Connect String 上有一个名为 Flush Interval 的参数集。定义为:
所有提交的事务刷新到磁盘之前的间隔时间(以秒为单位)。如果未指定,则默认值为 10。
我认为提交的事务,顾名思义,是一个已刷新到磁盘的事务,特别是数据库文件。如果一个事务只存储在 RAM 中,那么该事务就不会轻易丢失吗?
我认为事务首先写入日志文件,然后应用到数据库文件本身,所以这个参数可能意味着等待事务日志应用到数据库文件的时间?
本来以为这个参数应该是0。
更新-------
让我戴上我的数据库内部组件。据我了解,当应用程序启动事务时,事务开始记录被写入数据库 LOG,然后每个添加、更改或删除的记录被写入 LOG,然后是事务结束记录。一个单独的线程检测到事务结束并将记录从 LOG 移动到 DATABASE。完成后,事务 ID 会递增以指示事务已完成。如果进程在任何地方崩溃,当数据库启动时,它将检查 LOG 以确定数据库的状态并完成或回滚打开的事务。所有这一切都意味着在该过程的所有步骤中都将工作写入磁盘。
如果 Flush Interval 是从 LOG 写入 DATABASE 的时间,那么一切都有意义,但如果事务保存在 RAM 中而不是 LOG 中,则数据库不能符合 ACID。
【问题讨论】:
谁说 SQL Server Compact 是 ACID? 【参考方案1】:对于较新的版本,提交操作会超载。如果您使用 CommitMode.Immediate
参数调用 Commit,则 Flush-Interval 设置将被忽略,并且更改会立即保存到文件中。默认选项是CommitMode.Deferred
(在无参数调用中),它基于 Flush-Interval 值。
请参阅我关于 SQLCE 损坏的帖子:resolving corruption in SQL Server Compact Edition database files
【讨论】:
【参考方案2】:旧版本确实存在损坏问题。最新版本的最坏情况是缺少数据。
但是,您不能将参数设置为零。 1 是最小值。
【讨论】:
以上是关于SqlCE 刷新间隔 - 默认设置会导致损坏吗?的主要内容,如果未能解决你的问题,请参考以下文章