如何在任何ORDBMS中实现并发控制

时间:2014-08-05 10:13:36

标签: ordbms

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

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

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

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

由于 Nirmalya

1 个答案:

答案 0 :(得分:1)

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

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

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

  
      
  • 每个时间戳值唯一,并准确表示即时。
  •   
  • 没有两个时间戳可以相同。
  •   

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