日期:2014-05-16  浏览次数:20527 次

锁和阻塞

锁和阻塞

1.没有并发,就没有锁。

在数据库中,并发的意思是超过两个(含)以上的用户对同样的数据进行修改(包括插入、修改、删除),并行的意思是将一件事情分成很多小的部分,让每一部分同时执行,最后将执行结果进行汇总。并发和并行是不同的,没有并发,就没有锁。这里主要介绍TM锁和TX锁。

       其实,TM锁更像是一个段级的锁,通常我们叫它表锁,是因为我们把这个表看成了一个段。当某个表中有几个段的时候,可能一个段上有TM锁,而另外的段中没有TM锁(可以进行DDL操作)。TX锁实际上应该叫做事务锁,它主要是为了维护是事务的一致性,从这个角度来看,TX锁并非都是在对数据进行修改时才产生的,只要需要维护事务的一致性,就需要用到该锁。例如分布式事务,一般来说就是通过dblink在几个数据库中处理数据,因为是分布式的操作方式,所以需要一个事务的总协调者,这时候即使都是读取操作,依然需要一个TX锁来维护事务的一致性。

    Oracl中锁的信息是数据库的一个属性,是物理的,并不是逻辑上属于某个表或者某个行。在TX锁中,id1和id2构成了事务在回滚段中的位置。它(id1和id2)的用处是,当其他操作需要读取这个数据块时,会发现这个数据块上有活动的事务,因此需要到回滚段中去找该数据库之前的内容,那么这些内容在回滚段的什么地方?这两个值就告诉了你。对于TM锁,id1就是加锁的段对象,可以是一个表或者表上的一个分区,id2一般为0。

 

2.select  for update (no wait)

 

3.外键和索引

如果系统中有主、外键引用关系,并且满足以下情况之一,那么就应该考虑在外键字段中创建索引,以提高系统性能。

*主表上有频繁的删除操作

*主表上有频繁的修改操作

*业务上经常对主表和从表进行关联查询