2PL(Two-Phase Locking)算法是一种并发控制算法,用于管理并发事务对共享资源(如数据库中的数据)的访问。该算法采用两个阶段的锁定操作,以确保事务的隔离性和一致性。
在前面的课程中介绍了 DBMS 的主要模块及架构,自底向上依次是 Disk Manager、Buffer Pool Manager、Access Methods、Operator Execution 及 Query Planning。但数据库要解决的问题并不仅仅停留在功能的实现上,它还需要具备:
满足多个用户同时读写数据,即 Concurrency Control,如: 两个用户同时写入同一条记录
到目前为止,我们都假设所有的业务逻辑都位于应用本身,应用通过与 DBMS 通过多次通信,来达到最终业务目的,如下图所示:
这种做法有两个坏处:
值得注意的是,使用额外的 processes/threads 来并行地执行查询可以通过提高 CPU 利用率来提高 DBMS 效率;但如果 DBMS 效率瓶颈出现在 disk 数据存取上,这种优化带来的效果就非常有限,甚至有可能因为 disk I/O 的提高导致整体性能下降,如 cache miss rate 提高等等
启发式优化将查询的部分与已知的模式进行匹配,以重组计划。这些规则对查询进行转换,消除低效率的部分,这种方式不需要检查数据本身