0
我想得到一个改善我的设置,导致sql服务器返回死锁消息的建议。我有多个实际使用TaskParallel库的线程应用程序,每个任务将使用存储过程从表中选择一个ID用于处理。我立即从同一个陈述中的表中删除该ID,我认为这是造成死锁的原因。该表由一列没有索引的唯一标识符组成。我想定期进行批量删除,但这意味着要在多个服务器上保留一个使用ID的记录。死锁事务 - 通信缓冲区资源
这里是我的SQL存储过程:
CREATE PROCEDURE [dbo].[get_Ids]
@id nvarchar(20) OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Select top 1 @id = siteid from siteids
delete siteids where siteid = @id
END
有没有什么更好的方法来做到这一点?我的流程工作速度非常快,我曾经从webrequest服务请求这个ID,但这需要3秒钟。
感谢您的回复。他的事业将会每天处理大约5000万次交易,每秒处理多个线程。我会尽力而为。 – vbNewbie
@vbNewbie其他简单的选择方式并不多。把它放在原处,添加siteid索引并查看它的行为。如果还存在问题 - 请再次提供新的细节。它可能更快与整数,而不是nvvarchar siteid请参阅[链接](http://stackoverflow.com/questions/3284297/sql-server-int-vs-nvarchar-comparison-on-performance)。 – MaximR
我仍然遇到死锁,但只是添加代码重试,我认为这是至少我的处理速度比以前更快。我想知道,因为我插入到同一个数据库中的表中,这对工作负载也会产生影响。 – vbNewbie