并发控制:同步控制
共享锁
排他锁
事务持有数据项的锁:访问时持有
问题:可能引入死锁

确定为事务分配锁的策略:
保证冲突可串行

两阶段锁协议:
阶段1:获得锁不释放
阶段2:释放不获得
封锁点:事务最后一次获取锁的时间,多个事务根据锁点串行
严格协议:两阶段锁+排他锁事务提交后释放=避免脏读
强协议:所有锁事务提交后释放=串行化
两阶段锁协议:修改,锁升级与降级

锁管理器

死锁:
死锁预防:请求排序,同时获取所有数据
数据项排序,前提事务开始时,确定所有需要的数据
时间戳决定事务回滚
超时事务回滚
死锁检测:等待图(V:事务,E:数据),搜索环
死锁恢复:选择回滚事务:时间,权衡持有的数据,等待的数据,是否联级,已回滚次数。(饿死问题)
提高并发级别:
同步单元包含多个数据项,逐个加锁复杂,整体加锁阻塞热点。
树中非叶节点加锁(排他),节点到根的任一节点不可再获取排他锁(由意向锁标记)
多粒度协议锁:加锁从上到下,解锁从下到上

锁:冲突时决定偏序

时间戳:(任务级别)非资源级别冲突解决
事务增时间戳,回滚重分配
数据项维护两个时间戳:最近读写成功事务
可恢复性与无级联性保证:
1.事务末尾原子写入后可读
2.读推迟到提交后
3.跟踪未提交写操作,等待提交
提高并发级别:
thomas写规则:后者读过期值,放弃写,后者已写,跳过。

有效性检查(乐观):之前事务已提交,且未读之前事务写的数据

多版本两阶段锁

快照隔离:必须在数据库提交而非快照上检查完整性约束
for update 将读数据视为更新,实现为升级锁阻塞写?

幻读:
索引封锁:数据项访问先访问索引+共享||排他锁
谓词锁:更新操作提交前检查谓词是否成立

索引并发:避免占有多个锁
1.蟹行:获取叶节点共享锁——获取排他锁—(合并||删除时获取父节点排他锁)
2.b-link树

版权声明:本文为qmc1024原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qmc1024/p/13978734.html