mom*_*omo 5 concurrency transaction
大卫·克伦克 (David Kroenke) 的第 6 章 Database Concepts: Database Administration
我的理解是否正确,在数据库中,并发事务并没有真正发生。相反,它是一个快速发生的并发事务,用户认为它是一个并发事务?
我问的原因是因为我被任务中的问题所困扰,该问题询问执行并发事务需要多少 CPU。我回答只需要一个 CPU,因为它确实是一个正在发生的并发事务,而不是同时发生的事务?
想法,有人吗?
编辑: ~ jcolebrand -
@gbn 和 @Mark,
我感谢您的意见,但是,我完全不知道这些术语是什么,因为我目前正在学习的这门课程是数据库管理的入门课程,我的问题仅在书中的 1 段中讨论过,没有进一步详细说明。我也许能及时理解你的回答,但现在,我还不能。不过还是谢谢!
你的作业问题很糟糕,预期的答案可能不正确。欢迎发送讲师我们的方式来讨论!
摘自书中:
解释并发事务和同时事务之间的区别。同时进行事务需要多少个 CPU?
我猜预期的差异是:
我认为纳夫问题。
我的理解是否正确,在数据库中,并发事务不会真正发生
事务当然是同时运行的。问题是是否可以同时提交,这就是 @gbn 在他的回答中解决的问题。
@gbn 是正确的,如果您认为事务是在 WAL 条目硬化到磁盘时提交的,则不能发生两次同时提交。从崩溃恢复的角度来看,此时事务肯定已提交。如果发生故障,该事务将前滚(重做),而不是回滚(撤消)。由于两次写入磁盘不能同时发生,因此我们可以认为不能同时发生两次提交。
但是,您也可能会认为,当 IO 子系统通知 RDBMS WAL 写入已成功完成并且已释放其在事务期间持有的任何锁时,事务就已提交。因此,在多 CPU 环境中,可以并且将会发生同时提交。
SQL Server 发生这种情况的机制在性能调优等待和队列的标题为“执行模型(简化)”的部分中进行了解释。同样,对于 SQL Server 人员来说,阅读有关 WRITELOG 等待类型的背景知识有助于理解这些概念。
由于预写日志 (WAL),不会同时发生
WAL(又名事务日志、Bin 日志等,具体取决于 RDBMS)强制所有数据更改可序列化,以便以后重播或回滚。
在双核服务器上,两个写入可以同时进行,因为在 WAL 写入之前可能不会出现争用,其中一个写入必须在另一个写入之前发生。
更高层,锁存器和锁可以序列化同一行/页/表上的数据更改。