0

我对 ORDBMS 中的并发控制有一个奇怪的问题。这完全是理论上的。

我有两个事务 T1 和 T2 试图更新表上的特定行。现在事务 T1 和 T2 同时访问数据库。同时,我的意思是两个命中同时计算到纳秒。

因此,如果两个事务的时间戳完全相同,那么 DBMS(无论是 Oracle、DB2、SQL Server)如何识别首先处理哪个事务以及稍后处理哪个事务。

我知道一个事务将实现行级锁,而另一个事务将等到锁被释放。但是它将如何识别是 T1 还是 T2 将获得锁。除了时间戳之外,是否还考虑了其​​他一些参数。

谢谢尼尔玛利亚

4

1 回答 1

1

这个问题似乎更多地与 DBMS 的并发控制有关,而不是 ORDBMS。

无论如何,据我所知,即使两个请求恰好同时发出,它们也会被调度器按顺序处理,调度器负责获取锁和分配时间戳。显然,只有调度程序是顺序的:在调度之后,查询可以并行处理,如果锁和时间戳排序允许的话。

维基百科对基于时间戳的并发控制有准确的解释:https ://en.wikipedia.org/wiki/Timestamp-based_concurrency_control 。在那里,您可以看到需要做出的假设很少。看前两个:

  • 每个时间戳值都是唯一的,并且准确地代表了一个时刻。
  • 没有两个时间戳可以相同。

只有使用线程安全的调度程序才能保证这些假设,该调度程序按顺序为事务分配时间戳。同样在基于锁的并发控制中,调度程序必须是线程安全的。否则,当它锁定一条记录时,它无法确定没有其他事务在同一条记录上获得锁定。

于 2015-02-02T10:03:35.097 回答