数据库并发的问题与锁机制
2016-12-20 16:57
169 查看
数据库锁机制
共享锁
排他锁
更新锁
排他锁(独占锁,Exclusive Locks)
意向锁(Intent Locks)
计划锁(Schema Locks)
DDL语句都会加Sch-M锁
乐观锁:利用程序处理并发。原理都比较好理解,基本一看即懂。方式大概有以下3种
对记录加版本号.
对记录加时间戳.
对将要更新的数据进行提前读取、事后对比。
不论是数据库系统本身的锁机制,还是乐观锁这种业务数据级别上的锁机制,本质上都是对状态位的读、写、判断。
共享锁
排他锁
更新锁
排他锁(独占锁,Exclusive Locks)
意向锁(Intent Locks)
计划锁(Schema Locks)
DDL语句都会加Sch-M锁
该锁不允许任何其它session连接该表。连都连不了这个表了,当然更不用说想对该表执行什么sql语句了。
附:各种锁的兼容关系表
| Requested mode | IS | S | U | IX | SIX | X | | Intent shared (IS) | Yes | Yes | Yes | Yes | Yes | No | | Shared (S) | Yes | Yes | Yes | No | No | No | | Update (U) | Yes | Yes | No | No | No | No | | Intent exclusive (IX) | Yes | No | No | Yes | No | No | | Shared with intent exclusive (SIX) | Yes | No | No | No | No | No | | Exclusive (X) | No | No | No | No | No | No |
如何提高并发效率
悲观锁:利用数据库本身的锁机制实现。通过上面对数据库锁的了解,可以根据具体业务情况综合使用事务隔离级别与合理的手工指定锁的方式比如降低锁的粒度等减少并发等待。实现方式提交时select ……for update nowait乐观锁:利用程序处理并发。原理都比较好理解,基本一看即懂。方式大概有以下3种
对记录加版本号.
对记录加时间戳.
对将要更新的数据进行提前读取、事后对比。
不论是数据库系统本身的锁机制,还是乐观锁这种业务数据级别上的锁机制,本质上都是对状态位的读、写、判断。
相关文章推荐
- 【数据库】数据库的并发问题与锁机制
- (原创)使用TimeStamp控制并发问题[示例]-创建后台数据库脚本
- 数据库讲义第二章并发问题及控制手段
- 数据库的并发处理问题归纳
- 数据库并发问题详述
- 数据库并发问题详述
- (转)数据库并发问题详述
- 数据库并发操作的一致性问题
- 图形快速记忆数据库并发容易引起的问题
- 数据库并发操作的一致性问题
- [学习笔记]在数据库层面应对并发访问产生的问题
- 数据库---并发控制及其带来的问题丢失修改,读脏数据,不可重复读及解决(程序员级)
- 用Sql解决数据库并发更新问题
- 大量并发访问xml和数据库的效率问题
- 数据库并发操作的一致性问题
- 访问数据库时如何解决并发问题
- 数据库并发问题详述
- 多用户或并发数据库访问或操作的问题
- 数据库并发控制的三个问题
- 数据库事物并发---事物隔离机制