数据库中可串行化是什么特性?
- 内容介绍
- 文章标签
- 相关推荐
在数据库程序中,事务并发执行是常态。但这也带来了数据一致性与性能的两难。其实,很多开发者在设计业务逻辑时会遇到:“我想保证数据绝对一致。却担心串行化会导致查询变慢、锁等待过长”。
什么是可串行化?
可串行化是事务隔离级别中的最高级别。它要求并发执行的所有事务的结果必须等价于某个按顺序串行执行的调度从而消除脏读、不可重复读和幻读等并发问题。
主要概念
冲突可串行化: 通过交换相邻无冲突操作得到与某个串行调度等价;观测可串行化: 在读取初始值、同一写入值还有最终一次写入保持一致时满足。按理说,
为什么要实现可串行化?说起来,
对业务数据完整性和业务正确性是首要目标。当多个事务同时修改同一条记录时如果不进行严格控制。就可能出现:
- 再看脏读,读取未提交的数据。
- 说到不可重复读,同一事务多次读取得到不同结果。
- 至于幻读,范围查询出现新记录或消失记录。
痛点提示: - 开发者担心 "开启 SERIALIZABLE 会让程序卡住" - 运营团队关心 "高并发下的响应时间是否能接受"
从实现方式一来看,严格两阶段锁定
S2PL 是最常见且直观的实现方法。再看其工作流程,
- 获取锁阶段: 事务在开始前获取所需的共享或排他锁。直到完成所有操作后仍持有锁。
- 释放锁阶段: 事务提交或回滚后一次性释放所有持有的锁。
在数据库程序中,事务并发执行是常态。但这也带来了数据一致性与性能的两难。其实,很多开发者在设计业务逻辑时会遇到:“我想保证数据绝对一致。却担心串行化会导致查询变慢、锁等待过长”。
什么是可串行化?
可串行化是事务隔离级别中的最高级别。它要求并发执行的所有事务的结果必须等价于某个按顺序串行执行的调度从而消除脏读、不可重复读和幻读等并发问题。
主要概念
冲突可串行化: 通过交换相邻无冲突操作得到与某个串行调度等价;观测可串行化: 在读取初始值、同一写入值还有最终一次写入保持一致时满足。按理说,
为什么要实现可串行化?说起来,
对业务数据完整性和业务正确性是首要目标。当多个事务同时修改同一条记录时如果不进行严格控制。就可能出现:
- 再看脏读,读取未提交的数据。
- 说到不可重复读,同一事务多次读取得到不同结果。
- 至于幻读,范围查询出现新记录或消失记录。
痛点提示: - 开发者担心 "开启 SERIALIZABLE 会让程序卡住" - 运营团队关心 "高并发下的响应时间是否能接受"
从实现方式一来看,严格两阶段锁定
S2PL 是最常见且直观的实现方法。再看其工作流程,
- 获取锁阶段: 事务在开始前获取所需的共享或排他锁。直到完成所有操作后仍持有锁。
- 释放锁阶段: 事务提交或回滚后一次性释放所有持有的锁。

