课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据库事务是我们在学习后端数据库编程开发技术的时候需要重点掌握的一个编程知识,而今天我们就一起来了解一下,数据库事务都有哪些注意事项。
串行化
串行化是强的隔离级别,它可以防止所有可能的并发问题。串行化执行有三种主流的方案
真-串行执行
两阶段加锁
乐观并发控制(可串行化的快照隔离)
其中真串行执行在内存数据库中有着不错的表现,在线OLTP业务靠单线程往往能支撑不错的吞吐量。而对于强调持久化的数据库来说,串行执行会有很多限制。
两阶段加锁
两阶段加锁(2PL)是主流的串行化算法,与防止脏读的锁相比强制性更高,多个事务可以同时读取同一个对象,但只要出现写操作,就必须加锁独占访问。
即读操作与读操作不互斥,读操作与写操作互斥,写操作与写操作互斥。因为使用了较为复杂的锁机制,因此在实际运行中很容易出现死锁导致事务终止,应用层需要做好重试机制。
两阶段加锁的性能依旧不太乐观,一个大的事务可能会阻塞后续大量的事务。在并发量的大的情况下,死锁可能会非常频繁,导致性能问题。
可串行化的快照隔离
可串行化的快照隔离(SSI)是一种新出的算法,提供了完整的可串行性保证。相比两阶段加锁的悲观控制,SSI是基于乐观并发控制的方法实现的,它仍然是通过数据库的一致性快照来执行事务,在快照隔离的基础上增加了相关算法来检测写入之间的串行化冲突来决定终止哪些事务。
要解决写倾斜的问题,数据库需要假定对查询结果的任何变化都会导致写事务失效,即以下两种情况
读取的对象是否是一个已经过期或即将过期的MVCC对象
当前的写入是否影响即将完成的读取(读取之后又有新的写入)
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。