0

假设我有一个正在更新记录并遇到记录锁的进程,阻止它继续。我假设该过程通常会阻塞(而不是失败并要求应用程序实现自己的重试逻辑)。

假设是这样,这个块/锁究竟是如何被释放的?我看到了两种通用的选择:(1)驱动程序每 N 毫秒轮询一次 SQL Server;(2) SQL Server 在释放锁时向驱动程序发出信号。

我确信驱动程序和配置等之间存在一些可变性,我正在寻找一个总体思路。

4

2 回答 2

2

两者都不。驱动程序不参与阻塞过程——执行查询的内部 SQL Server 线程(或纤程)是被阻塞的,并且可能涉及多种机制(一些旋转等待、一些轮询、一些阻塞等)。司机只是在等待结果。

于 2012-07-05T15:18:21.140 回答
1

客户端“驱动程序”通常不参与,也不通知 SQL Server 的锁定。当他们的命令请求(通常是批处理)完成执行和/或准备好将数据传输回客户端时,SQL Server会通知客户端。

于 2012-07-05T15:20:39.160 回答