Lecture 16 Concurrency Control Theory
并发控制横跨数据库实现的三个部分,operator execution,access methods,buffer pool manager
为什么需要并发控制
transaction
transaction是DBMS执行的最小单位,如果没有开启事务,那么DBMS会把一条sql语句当做一个transaction
将数据库看作是一系列Object的bag。
- Atomicity,txn必须是原子的
- Consistency, 对于一个txn执行前后的DB状态,必须保证DB的状态是一致的,比如A给B转100块,那么事务结束时,二者的钱的总数是一致的
- Isolation,txn之间是透明的,也是就说一个txn未提交,那么其他txn不能够看见该txn所做的改变
- Durability,txn提交后,其对数据库所做的改变是永久的
Atomicity
Logging
日志还可以audit,也就是查旧账
还可以提高性能,对于I/O操作不行的时候,可以选择先写日志,然后累加到一定时候,异步写到磁盘
Shadow Paging
只备份修改过的page
Consistency
Database Consistency
Transaction Consistency:
transaction consistency由应用本身保证,比如给A减100块,但是给B加150块,就是应用没有保证事务的一致性
Isolation
为了实现高效,DBMS需要实现事务的operation之间的交错执行
Concurrency Control
并发控制的好处:可以更好的利用慢的磁盘,更好的利用多核cpu,
并发控制的执行schedule
用serializability这个量来描述一个schedule是否正确,其刻画的是
下面是描述schedule的属性
serializability不好理解,但是很重要与有效?
事务operation之间的conflict
coflict
用于判断两个schedule是否是Equivalent,或者说判断一个schedule是否是serializable,
三种conflict:
- Read-Write Conflicts (“Unrepeatable Reads”),不可重复读
- Write-Read Conflicts (“Dirty Reads”):
- Write-Write conflict (“Lost Updates”):
Conflict Serializability
如果依赖图无环,那么该schedule(也就是txn之间的operatorion执行方案)是可串行化的,注意,serializable
意味着交错执行多个txn的operations的结果与serial execution一致,conflict serializability
是为了保证correctness
但是schedule 与 serial execution一致并不能说明该schedule是conflict serializability
这个一致性冲突没看懂?这里应该是指图中的执行流程是错的,就是与serial execution的执行结果不一致
必须的先写完AB再读AB,或者先读完AB再写AB
view serializability
一个schedule,即使是依赖图中存在环,也有可能是Equivalent Serializable Schedule
view serializability与 conflict serializability都无法判断所有serializable schedule
view serializability虽然比 conflict serializability能够判断更多的schedule是serializable
Durability
logging 与 shadow page也能够保证durability
?
Google的程序员认为最好还是使用事务处理并发,只有当在使用事务时处理业务,遇到性能问题时,才考虑使用非事务的手段处理业务