【发布时间】:2012-11-03 12:59:56
【问题描述】:
我想获得有关改进导致 sql 服务器返回死锁消息的设置的建议。我有多个线程应用程序,它实际上使用 TaskParallel 库,每个任务将使用一个存储过程从表中选择一个 id 以用于其处理。我立即在同一语句中从表中删除了该 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 秒。
【问题讨论】:
标签: sql-server-2008 database-deadlocks