串行等价性,满足串行等价性的事务,可以让CPU在不同事务间切换,轮有执行。这样的当事务中含有需要长时间访问磁盘的操作时,就可以执行其他事务,提供资源利用率。同时对于短事务可以降低响应时间。
事务的串行等价性,指事务所含指令交叉执行的结果与串行一个一个执行结果似乎一样的。
事务具有串行等价的充分必要条件,如果不同事务访问的资源有重叠,含有冲突操作时,那么不同事务访问资源的顺序必须一样。
比如: 事务A,先访问i,再访问j资源;而事务B,先访问j,再访问i资源。访问还是冲突的(如读写冲突、写写冲突),那事务A与事务B将不满足串行等价。这样就无法实现CPU在不同事务间来回切换执行。
对于不满足串行等价的事物,服务器可以通过串行化对象访问来达到事物的串行等价。
这就好比两个线程访问资源是冲突的,那么我就加锁强制两个线程串行的访问资源。
不同人编写的事务不同,访问的资源不同,CPU如何在这些事务的指令上切换也是随意的,那么怎么能保证这些事务执行的结果是对的呢。
简单的做法是加互斥锁,一个对象一把锁,一个时刻只有一个人可以访问、修改该对象,同时直到事务中所有的操作执行完了才一并释放锁。这就是两阶段加锁。
加锁必然降低并发,那么就通过修改锁,提出了读锁、写锁分离、层次锁等概念来减低锁的粒度、锁