c# - 多线程环境中的 SQL Server 存储过程

标签 c# sql-server multithreading stored-procedures

我需要以线程安全的方式执行一些 Sql 服务器存储过程。目前我正在使用软件锁(C#锁)来实现这一点,但想知道Sql服务器本身提供了什么样的功能来实现线程安全。 Sql server 中似乎内置了一些表和行锁定功能。

另外,从性能的角度来看,什么是最佳方法?软件锁?还是 Sql Server 内置锁?

谢谢, 沙米卡

最佳答案

您客户端的线程与您的数据库行为关系不大。 SQL Server 是一个多用户数据库,所以任何人都可以同时在不同的机器上对数据库做任何事情,世界上所有的线程安全都无济于事。 SQL Server 将在事务期间使用锁来维护数据库,以确保维护 ACID 规则和所有数据库约束。

通常,当您在同一线程上的单个机器上执行存储过程时,它们将是顺序的并且不会冲突。如果您有多个线程或使用 ADO.NET 的异步功能,那么这些过程可能会在 SQL Server 中相互干扰 - 即阻塞或死锁 - 但 SQL Server 将处理所有这些。显然,在这种情况下,您在应用程序中围绕它们的任何代码都需要是线程安全的——即您不能对两个请求使用相同的 IAsyncResult 句柄,您需要确保两个线程都不会尝试修改相同的数据完成等的结果

您需要更清楚地列出您的要求,因为这是两种完全不同的锁定方案。

关于c# - 多线程环境中的 SQL Server 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474743/

相关文章:

c# - Linq数据类型不匹配问题

c# - 无法(或能够)List<int>.Cast<Enum>()?

c# - 使用c#进行聚合分组

c# - Nhibernate 数据库优先

sql - 根据字符修剪字符串

SQL Server CE 日期存储在字符串 : how to compare 中

java - Thread.currentThread().getName() 和 getName() 有什么区别?

multithreading - 读取大数据 block 时是否会出现竞争条件?

sql-server - SSIS - 包在 VS 中工作,失败并显示 "Failed to compiled scripts contained in the package"。包中没有脚本对象

multithreading - 快速线程安全读取优化 Map[Long, _]