> 데이터 베이스 > MySQL 튜토리얼 > 중복 레코드 검색으로 인해 주문 처리 시 SQL Server 경합 상태를 어떻게 해결할 수 있습니까?

중복 레코드 검색으로 인해 주문 처리 시 SQL Server 경합 상태를 어떻게 해결할 수 있습니까?

Patricia Arquette
풀어 주다: 2025-01-18 01:22:10
원래의
579명이 탐색했습니다.

How Can I Resolve a SQL Server Race Condition in Order Processing Due to Duplicate Record Retrieval?

주문 처리 시 SQL Server 경합 조건 해결

여러 프로세서가 동일한 레코드를 검색하기 때문에 주문 처리 시스템에 경합 상태가 발생했습니다. 이 문제를 해결하는 방법은 다음과 같습니다.

문제 이해:

문제는 저장 프로시저에서 별도로 잠긴 뷰의 선택 항목과 결합된 ROWLOCK 힌트를 사용하는 데서 발생합니다. 이로 인해 여러 프로세서가 동일한 기록을 잠가서 데이터가 손상될 수 있습니다.

힌트를 사용한 해결 방법:

경합 상태를 해결하려면 READPASTUPDLOCK 힌트를 사용하세요.

<code class="language-sql">BEGIN TRAN
    UPDATE TOP (20)
    OrderTable foo
SET
    ProcessorID = @PROCID
FROM
    foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
    ProcessorID = 0
COMMIT TRAN

SELECT
    OrderID, ProcessorID, etc...
FROM
    OrderTable
WHERE
    ProcessorID = @PROCID</code>
로그인 후 복사

READPAST은 선택 중에 행이 잠기는 것을 방지하여 지속적인 쿼리 실행을 보장합니다. UPDLOCK 업데이트 중 적절한 잠금을 보장하여 동시 수정을 방지합니다.

더 효율적인 솔루션:

보다 간소화된 접근 방식은 OUTPUT 절을 사용하여 SELECTUPDATE 작업을 결합합니다.

<code class="language-sql">BEGIN TRAN
    UPDATE TOP (20) foo
    OUTPUT
        OrderID, ProcessorID, etc...
    SET
        ProcessorID = @PROCID
FROM
    foo WITH (ROWLOCK, UPDLOCK, READPAST)
WHERE
    ProcessorID = 0
COMMIT TRAN</code>
로그인 후 복사

이렇게 하면 별도의 SELECT 문이 필요하지 않아 효율성과 코드 명확성이 향상됩니다.

위 내용은 중복 레코드 검색으로 인해 주문 처리 시 SQL Server 경합 상태를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿