我需要以线程安全的方式执行一些Sql server存储过程。目前我正在使用软件锁(C#锁)来实现这一点,但想知道Sql服务器本身提供了什么样的功能来实现线程安全。似乎有一些内置于Sql server的表和行锁定功能。
从性能角度来看,最佳方法是什么?软件锁?还是Sql Server内置锁?
谢谢, Shamika
答案 0 :(得分:4)
客户端的线程与数据库行为几乎没有关系。 SQL Server是一个多用户数据库,因此任何人都可以同时在不同的机器上对数据库执行任何操作,并且世界上所有的线程安全都无法帮助解决这个问题。 SQL Server将使用锁在事务期间维护数据库,以确保维护ACID规则和所有数据库约束。
通常,当您在同一个线程上的单个计算机上执行存储过程时,它们将是顺序的并且不会发生冲突。如果您有多个线程或使用ADO.NET的异步功能,那么这些过程可能会在SQL Server中相互干扰 - 即阻塞或死锁 - 但SQL Server将处理所有这些。显然,在这种情况下,您的应用程序中围绕它们的任何代码都需要线程安全 - 即您不能对两个请求使用相同的IAsyncResult句柄,您需要确保两个线程都不会尝试修改相同的数据。完成等的结果
您需要更清楚地列出您的要求,因为这是两种完全不同的锁定方案。