ITPub博客

首页 > Linux操作系统 > Linux操作系统 > lock

lock

原创 Linux操作系统 作者:周应侯 时间:2012-03-26 09:05:57 0 删除 编辑
事务:
数据库系统与其他数据管理方法很重要的一个区别就是“允许并发访问”
“允许并发”虽然是很好的功能,但是这个功能是很有代价的,实现并发最大的挑战是“数据不一致”,也就是说如何同时保证“并发”和“数据一致”,是数据库系统最核心的内容
“数据不一致”:
脏读:读的是没有commit的数据                
不可重复读:读的是别人修改过的数据             
幻影读:读的是别人新添加的数据           
数据一致性:就是每个查询所能看到的结果集,是这个查询被提交那个时点的状态
要想提高更大的“并发能力”,就要牺牲“数据一致性”
sql标准中定义了4种“数据一致性级别”,也叫作“隔离级别”
   隔离级别             脏读        不可重复读      幻影读
read uncommitted      Y                 Y                Y                                        
read committed         N                 Y                Y                                    
repeateable               N                 N               Y                  
serializable                N                 N                N               
存在的不一定是合理的
read uncommitted  不希望 写 阻塞 读   在数据一致性方面牺牲得最多
read committed    保证数据一致性,牺牲并发,写 阻塞 读
repeateable          为了避免  不可重复读  和  丢失数据
serializable            独占,并发最差
oracle最骄傲的就是默认实现了read committed级别而不影响并发;
oracle一共提供了read committed,serializable和read only三种隔离级别
read only是oracle特有的
另外两种级别需要用语句明确定义
serializable                                                                          read only
其他用户可以修改数据,但是这些修改对于本回话不可见               一样
本回话可以修改数据,但是如果修改的数据已经                          本回话不能修改
被其他用户修改,会抛出ora_08177异常
数据库系统是用“锁” 来控制 “并发”
lock:
首先它代表的是一种控制机制,其次在这种机制中有一个成员也叫做lock
从机制角度来看:lock包括3中组件:
resource structure资源,lock structure锁,enqueue排队机制
前两个是数据结构,后面的是算法
oracle对于每个需要进行“并发控制”的资源,都在sga中用一个数据结构来描述它
这个数据结构就是resource structure
这个数据结构中有3个并发控制有关的成员,owner,waiter,converter
每当进程要访问共享资源时,必须要先:锁定: 资源
在一个lock structure 中,记录了“锁模式”,进程ID··
锁模式用于表示对资源的保护级别
 常见的有3种;
null
share
exclusive       拥有者本身对资源进行修改时,不允许其他用户任何并发访问
enqueue算法:先入先出队列

 行级锁涉及4种数据结构:
 itl:记录事务号,实际上就是这个事物要使用的回滚段地址
 itl索引:指向申请到的表项
 tx锁:申请一个回滚段资源
 tm锁:保护事务在修改的过程中,其他用户不能修改表结构

1、申请一个tx锁,申请一个回滚段
2、再获得这个tm锁,保证其他用户不能修改表结构
3、再到数据块头部的itl表中申请一个空闲表项,实际上就是记录这个事物要使用的回滚段的地址
4、然后再在itl索引中建立一个索引,便于快速寻找,
5、在开始修改数据,修改之前会在回滚段中记录修改前的内容,
6、当其他用户并发修改这个记录时,会根据itl索引中记录的itl表中的内容,查看这个事务是否已经提交,
7、如果没有提交,那么这个用户的tx锁会一直等待前一个tx锁释放资源,
该事务真正需要的只是一个tx锁,每个表的一个tm锁,内存开销非常小,
oracle中的对象可以分为两种:
一个简单对象,一个复合对象
简单对象只有3种锁模式,null,share,exclusive
复合模式除了这3种之外,还有3种

解析、优化、产生执行计划、返回结构  4个阶段
latch 抢先机制
lock排队机制
latch原子操作,很快
lock 不是原子操作
rac锁有四种:
 local lock本地锁 --由用户进程和后台进程使用的  分为lock和latch
 global lock全局锁 --由后台进程使用的  cache fusion 和non-cache fusion
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22815499/viewspace-719514/,如需转载,请注明出处,否则将追究法律责任。

上一篇: rman 读书笔记
下一篇: 表的存储
请登录后发表评论 登录
全部评论

注册时间:2009-11-03

  • 博文量
    56
  • 访问量
    143769