主流关系数据库锁实现的区别
SQL Server实现的锁主要是由通过锁表来实现,在内存中开辟专门区域对于不同级别的对象(行、键-块-对象、索引-库)相应的锁记录,事务层和存储层完全分离,并且锁占用开销较大,当锁占用较多资源的时候,会进行锁升级降低并发性。
MySQL对与锁的实现主要是行键的实现,采用在页面头部记录位图的方式,这样做在检索行锁记录的时候需要到页面头部获取数据,页面头部因为用位图信息记录行锁,所以相比SQL Server省去了较多的资源,无需进行锁升级。另外gap lock的实现可以很好的支持高级别的隔离级别和并发性的提升,例如RR隔离级别。
Oracle对锁的实现是将事务层和存储层结合的方式进行处理,锁的信息在块头的ITL事务槽和行信息中,这样做极大的节省了内存资源和锁资源,锁几乎不占用任何资源,锁定信息完全结合事务槽和行标志进行判断,不像MySQL有单独的内存锁表分离来处理,在rac模式下,可以很方便的对于除了数据之外的事务和锁信息进行同步,存储及事务,使得rac的设计单一有效,但缺点也很明显,就是过于结合紧密的事务层和存储层使得基于事务的扩展变得很困难。
PostgreSQL的锁设计内存中不记录行锁信息,行锁信息由行上的transactionid信息得到,节省内存资源, 在索引回表时采用mvcc技术避免普通的snapshot now模式或者其他非mvcc需要使用锁定的劣势。对于
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341