表锁和行锁
1 表锁需要维护的数量比行锁少,所以行锁所需的成本高。但对于同一个表的操作来说 比如先要在最后一行添加一行数据,然后再修改其他行的数据。这就得用行锁。所以说行锁和表锁不能说那个好那个不好,只能根据情况定。
2 但是加了行锁 还得加意向锁 但是表锁不需要。 对于比较锁的快慢没有意义。应该比较的是不同粒度锁的情况下插入更新删除的速度。
3 锁定对象的大小叫做锁的粒度。所对象可以是逻辑单元(如数据库,表,记录,列,索引) 也可以是物理单元(如数据页,索引页)。
锁定的粒度 与系统的并发度和并发控制的开销密切相关。一般锁的粒度越大 ,锁定的对象就小,可选择性小,开销就笑 并发度就小。反之 粒度越小,对象就多 ,可选择性大,开销大 并发大。
4 :所以在锁定粒度的同时应该考虑并发度 和开销,以求最优效果。一般需要处理大量记录的事物可以是表的锁定粒度。需要多个表中的大量记录的事物可以以数据库为锁定粒度。如果需要处理某个表中的少量记录则一记录为锁定粒度。
5 多粒度锁协议是指,允许对多粒度树中的节点单独地加锁,另外对一个节点加锁意味着对这个节点的各个子节点也加同样的锁。
因此可以用俩中方式对多粒度树中的节点加锁 :显式锁定和隐式锁定。显示锁定是在事物明确指定的节点上加锁。 隐式锁是由于在其上级节点中加显示锁时而使该节点获得锁。
一般对一个节点加锁时,先检查该节点上是否有无显示锁定与之冲突,检查上级节点是否有无锁与之冲突。 检查下级 节点是否有无锁冲突。