首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在发生停电时,事务性系统如何保持一致性?

在发生停电时,事务性系统如何保持一致性?
EN

Stack Overflow用户
提问于 2021-09-11 00:11:25
回答 1查看 96关注 0票数 0

在发生停电时,事务性系统如何保持一致性?例如,考虑下面在事务中执行的操作。

代码语言:javascript
复制
UPDATE table SET someColumn = someColumn + 1 WHERE <whatever>

在突然停电的情况下,我们如何确保操作是否完成?

来自SQL server文档:

Server使用预写日志记录(WAL)算法,它保证在关联的日志记录写入磁盘之前不会将任何数据修改写入磁盘。这维护了事务的ACID属性。..。在从缓冲区缓存中删除关联的脏页并将其写入磁盘之前,必须将日志记录写入磁盘。

据我所知,使用上面的SQL增量操作的例子,会发生以下操作:

  1. 将记录写入事务日志。
  2. 将更改刷新到磁盘。

当突然关闭时,系统如何知道增量操作是否已经完成?它是如何从何时回滚的?(在将日志添加到事务日志之后,但在刷新更改到磁盘之前,会发生关闭吗?)

我还有一个(第二个)问题,和这个问题很相似。我们如何保证原子性?例如,

代码语言:javascript
复制
UPDATE table SET someColumn = someColumn + 1 AND otherColumn = otherColumn + 2 WHERE <whatever>

如何确保在突然停电的情况下,字段otherColumn也将被更新,或者没有字段将被更新?

EN

回答 1

Stack Overflow用户

发布于 2021-09-11 02:09:51

预写测井 (WAL).见eg 事务日志体系结构

在将日志添加到事务日志后,可以发生关闭,但在刷新更改到磁盘之前,是吗?

日志记录将添加到内存中的事务日志中,但当事务提交时,Server将等待确认所有日志记录都已写入持久媒体。在重新启动时,如果事务的所有日志记录都未刷新到磁盘,则事务将被回滚。

Server要求存储系统将更改刷新到磁盘,从而禁用任何非持久性的写缓存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69139065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档