假设我有一个正在更新记录并遇到记录锁定的进程,阻止它继续。我假设该过程通常会阻塞(而不是失败并要求应用程序实现自己的重试逻辑)。
假设是这样,这个块/锁是如何释放的?我看到两种常见的替代方案:(1)驱动程序每N毫秒轮询一次SQL Server; (2)释放锁时,SQL Server会向驱动程序发出信号。
我确信驱动程序和配置等之间存在一些差异,我正在寻找一个大致的想法。
答案 0 :(得分:2)
都不是。驱动程序不参与阻塞过程 - 执行查询的内部SQL Server线程(或光纤)被阻止,并且可能涉及多个机制(一些自旋等待,一些轮询,一些阻塞等)。司机正在等待结果。
答案 1 :(得分:1)
客户端“驱动程序”通常不参与,也不会通知SQL Server的锁定。 SQL Server 告诉客户端他们的命令请求(通常是批处理)是否已完成执行和/或准备好将数据传回客户端。