SQL Server实现的锁主要是由通过锁表来实现,在内存中开辟专门区域对于不同级别的对象(行、键-块-对象、索引-库)相应的锁记录,事务层和存储层完全分离,并且锁占用开销较大,当锁占用较多资源的时候,会进行锁升级降低并发性。
MySQL对与锁的实现主要是行键的实现,采用在页面头部记录位图的方式,这样做在检索行锁记录的时候需要到页面头部获取数据,页面头部因为用位图信息记录行锁,所以相比SQL Server省去了较多的资源,无需进行锁升级。另外gap lock的实现可以很好的支持高级别的隔离级别和并发性的提升,例如RR隔离级别。
Oracle对锁的实现是将事务层和存储层结合的方式进行处理,锁的信息在块头的ITL事务槽和行信息中,这样做极大的节省了内存资源和锁资源,锁几乎不占用任何资源,锁定信息完全结合事务槽和行标志进行判断,不像MySQL有单独的内存锁表分离来处理,在rac模式下,可以很方便的对于除了数据之外的事务和锁信息进行同步,存储及事务,使得rac的设计单一有效,但缺点也很明显,就是过于结合紧密的事务层和存储层使得基于事务的扩展变得很困难。
PostgreSQL的锁设计内存中不记录行锁信息,行锁信息由行上的transactionid信息得到,节省内存资源, 在索引回表时采用mvcc技术避免普通的snapshot now模式或者其他非mvcc需要使用锁定的劣势。对于
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。