H2 数据库:60 秒的写入延迟对数据库健康有不利影响吗?

问题描述

我们目前在嵌入式模式下使用 H2 版本 199,具有认的 nio 文件协议和 MVStore 存储系统。 write_delay 参数设置为 60 秒。

我们在 2 秒内(在一个事务中)运行了大约 30.000 条语句的批量插入/更新/删除,然后仅在 30 秒后(在第二个事务中)又运行了几百条语句。下一次尝试打开数据库连接(仅 2 分钟后)显示数据库已损坏:

File corrupted while reading record: null. Possible solution: use the recovery tool [90030-199]

由于事务在一分钟内发生,我们想知道 60 秒的 write_delay 是否可能导致问题。

解决方法

将 write_delay 更改为 60 秒(从默认值 0.5 秒)肯定会增加丢失交易的风险,我认为这样做没有充分的理由。但是,不应导致数据库损坏。更有可能的是一些线程中断会这样做,因为您在同一个 JVM 中运行 Web 服务器并且谁知道还有什么。使用异步文件存储可能会在这方面有所帮助,而且它足够稳定(无论如何,它对您的应用来说可能比数据库损坏更糟糕)。