甲骨文学习之性能优化(十)锁

  

,锁(锁)是用于防止在访问相同的资源(包括用户对象,系统对象,内存,Oralce数据字典中的共享数据结构,最常见的是数据库表的表对象)时,事务之间的有害性交互(存、取)的一种机制。

,不同类型的锁,代表了当前用户是允许还是阻止其它用户对相同资源的同时存取,从而确保不破坏系统数据的完整性,一致性和并行性。

,加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

锁的分类

<李>

DML锁:选择、插入、更新、删除、合并操作

<李>

DDL锁:创建和修改语句操作

<李>

内部锁和闩:甲骨文使用这些锁来包含内部数据结构,例如:甲骨文查询生成的执行计划,执行计划会保存在库缓存中,当使用这个执行计划时,会对其加一个闩(锁)

,

DML锁

,用于确保一次只能一个人修改某行数据,而且你正常处理这个表时,别人不能删除这个表。

<李>

TX锁,事务发起第一个修改时,会得到一个TX锁(事务锁),而且会一直持有这个事务,直到事务结束(提交或者回滚)。事务中修改或者选择更新的每一行都会指向该事务的TX锁。

<李>

TM锁,用于确保在修改表内容时,表的结构不被改变。

下面举例说明

登录到斯科特用户,并确定会话id

完成,grant  select  any  dictionary 用斯科特;      Grant 成功了。      完成conn 斯科特/老虎      完成,select  sid 得到v $ mystat  where  rownum=1;      ,,,,,SID   ----------   37      完成

另开启一个会话,监控锁的使用情况

完成set  linesize  200   完成,select  *,得到v $ lock  where  sid=37;      addr, kaddr, SID  TY ,,,,,,, id1,, id2,,, LMODE ,,,请求,ctime,,,,   - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - -,- - - - - - - - - - -,-,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -   0000000090 d8fc88  0000000090 d8fce0,, 37, AE ,,,,,,, 100,,,, 0,,,,,,, 4,, 0,,, 481 0      完成

会话1执行更新操作

完成,update  emp  set  ename=initcap (ename);      14,rows 更新。

会话2查看结果

完成/addr, kaddr, SID  TY ,,,,,,, id1,, id2,,, LMODE ,,,请求,ctime,,,,   - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - -,- - - - - - - - - - -,-,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -   0000000090 d8fc88  0000000090 d8fce0,, 37, AE ,,,,,,, 100,,,, 0,,,,,,, 4,, 0,,, 944 0   00007 ff9eeda4ab0  00007 ff9eeda4b10,, 37, TM ,,,,, 87108,,,, 0,,,,,,, 3,, 0,,,,, 3 0   000000008 f673658  000000008 f6736d0,, 37, TX ,,,, 131074,, 908,,,,,,, 6,, 0,,,,, 3 0

多了一个事务锁,一个TM锁。

会话1中再执行另一个表的更新操作

完成,update  dept  set  dname=initcap (dname);      4,rows 更新。

会话2查看结果

完成/addr, kaddr, SID  TY ,,,,,,, id1,, id2,,, LMODE ,,,请求,ctime,,,,   - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - -,- - - - - - - - - - -,-,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -,- - - - - - - - - - -   0000000090 d8fc88  0000000090 d8fce0,, 37, AE ,,,,,,, 100,,,, 0,,,,,,, 4,, 0, 1174 0   00007 ff9eeda7b58  00007 ff9eeda7bb8,, 37, TM ,,,,, 87108,,,, 0,,,,,,, 3,, 0,,, 233 0   00007 ff9eeda7b58  00007 ff9eeda7bb8,, 37, TM ,,,,, 87106,,,, 0,,,,,,, 3,, 0,,, 27个0   000000008 f673658  000000008 f6736d0,, 37, TX ,,,, 131074,, 908,,,,,,, 6,, 0,,, 233 0

事务锁没有变,但是又多了一个TM锁。

对于TM锁来说,id1的值是对象的ID

完成COL  OBJECT_NAME  FOR 故事本来   完成,select  OBJECT_NAME OBJECT_ID 得到dba_objects  where 所有者=八箍铺亍?以及OBJECT_NAME 拷贝(“部门”、“EMP”);      object_name object_id   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

甲骨文学习之性能优化(十)锁