Update ch7.md

更新错误
This commit is contained in:
Zhaoyang 2021-12-13 22:02:58 +08:00 committed by GitHub
parent feb7bd3ea6
commit 713493aa5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

2
ch7.md
View File

@ -204,7 +204,7 @@ SELECT COUNT*FROM emails WHERE recipient_id = 2 AND unread_flag = true
尽管重试一个中止的事务是一个简单而有效的错误处理机制,但它并不完美:
- 如果事务实际上成功了,但是在服务器试图向客户端确认提交成功时网络发生故障(所以客户端认为提交失败了),那么重试事务会导致事务被执行两次——除非你有一个额外的应用级重机制。
- 如果事务实际上成功了,但是在服务器试图向客户端确认提交成功时网络发生故障(所以客户端认为提交失败了),那么重试事务会导致事务被执行两次——除非你有一个额外的应用级重机制。
- 如果错误是由于负载过大造成的,则重试事务将使问题变得更糟,而不是更好。为了避免这种正反馈循环,可以限制重试次数,使用指数退避算法,并单独处理与过载相关的错误(如果允许)。
- 仅在临时性错误(例如,由于死锁,异常情况,临时性网络中断和故障切换)后才值得重试。在发生永久性错误(例如,违反约束)之后重试是毫无意义的。
- 如果事务在数据库之外也有副作用,即使事务被中止,也可能发生这些副作用。例如,如果你正在发送电子邮件,那你肯定不希望每次重试事务时都重新发送电子邮件。如果你想确保几个不同的系统一起提交或放弃,**两阶段提交2PC, two-phase commit** 可以提供帮助(“[原子提交与两阶段提交](ch9.md#原子提交与两阶段提交)”中将讨论这个问题)。