【发布时间】:2011-03-07 15:28:45
【问题描述】:
我有一个问题,即在完全相同的时间使用完全相同的参数调用相同的存储过程。
存储过程的目的是在记录存在时获取记录,如果记录不存在则创建并获取记录。
问题是两个线程都在检查记录的存在并报告错误,然后两个线程都在插入一条新记录,在数据库中创建了一个副本。
我尝试将操作保留在事务中,但这只会产生数百个死锁。
有什么方法可以以线程安全的方式检查记录是否存在,以便第二个线程在第一个线程完成插入之前不会进行读取?我无法控制线程本身,只能控制它们正在执行的存储过程。
任何帮助将不胜感激,
谢谢。
【问题讨论】:
-
它产生了死锁,这些事务到底在做什么;它们不能像您所说的那样简单。您使用的是什么 RDBMS?
-
相反,过程非常简单——检查记录是否已经存在,如果不存在则创建它,然后选择记录。我们遇到问题的唯一原因是并发线程很多(最多 200 个)。
-
哦,我忘了说 - 使用 SQL Server 2008。
标签: sql-server multithreading sql-server-2008 concurrency