加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 高效的事宜,记录锁定

发布时间:2021-03-23 21:48:08 所属栏目:编程 来源:网络整理
导读:我有一个存储进程,它选择1笔记录.可以从差异PC上的几个差异应用措施挪用存储进程.这个设法是存储进程带回了必要处理赏罚的下一笔记录,假如两个应用措施同时挪用存储进程,则不该该返回沟通的记录.我的查询如下,我正在实行尽也许高效地编写查询(sql 2008).它可以比

我有一个存储进程,它选择1笔记录.可以从差异PC上的几个差异应用措施挪用存储进程.这个设法是存储进程带回了必要处理赏罚的下一笔记录,假如两个应用措施同时挪用存储进程,则不该该返回沟通的记录.我的查询如下,我正在实行尽也许高效地编写查询(sql 2008).它可以比这更有用地完成吗?

CREATE PROCEDURE GetNextUnprocessedRecord
AS
BEGIN
    SET NOCOUNT ON;

    --ID of record we want to select back
    DECLARE @iID BIGINT     

    -- Find the next processable record,and mark it as dispatched
    -- Must be done in a transaction to ensure no other query can get
    -- this record between the read and update
    BEGIN TRAN

        SELECT TOP 1
            @iID = [ID]
        FROM
            --Don't read locked records,only lock the specific record
            [MyRecords] WITH (READPAST,ROWLOCK)
        WHERE
            [Dispatched] is null
        ORDER BY
            [Received]

        --Mark record as picked up for processing   
        UPDATE 
            [MyRecords]
        SET
            [Dispatched] = GETDATE()
        WHERE
            [ID] = @iID     

    COMMIT TRAN

    --Select back the specific record
    SELECT 
        [ID],[Data]
    FROM    
        [MyRecords] WITH (NOLOCK,READPAST)
    WHERE
        [ID] = @iID

END

办理要领

行使READPAST锁定提醒是正确的,您的SQL看起来没题目.

我添加行使XLOCK固然也是HOLDLOCK / SERIALIZABLE

...
[MyRecords] WITH (READPAST,ROWLOCK,XLOCK)
...

这意味着您得到了ID,并在您继承并更新它时专门锁定该行.

编辑:在Dispatched和Received列上添加索引以使其更快.假如[ID](我以为它是PK)没有聚积,则INCLUDE [ID].并过滤索引,由于它是SQL 2008

你也可以行使这个布局,它可以在没有XLOCK或HOLDLOCK的环境下一次完成

UPDATE
    MyRecords
SET
    --record the row ID
    @id = [ID],--flag doing stuff
    [Dispatched] = GETDATE()
WHERE
    [ID] = (SELECT TOP 1 [ID] FROM MyRecords WITH (ROWLOCK,READPAST) WHERE Dispatched IS NULL ORDER BY Received)

UPDATE,assign,set in one

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读