SQL Server 대기열의 동시 처리
테이블을 대기열로 사용할 때 여러 클라이언트의 동시 처리를 위해 구성하는 것이 어려울 수 있습니다. . 적절한 구성이 없으면 여러 작업자가 동일한 행을 처리하려고 시도하여 경합이 발생할 수 있습니다.
낙관적 동시성 제어:
제공된 쿼리는 처음에 비관적 잠금을 얻으려고 시도합니다. 처리할 행에 대해 한 명의 작업자만 액세스할 수 있도록 허용합니다. 그러나 이 접근 방식은 대기 시간이 길어지고 동시성이 줄어들 수 있습니다.
Output 절을 사용한 비관적 동시성 제어:
SQL Server 2005에서는 더 많은 작업을 허용하는 OUTPUT 절을 도입했습니다. 효율적인 비관적 동시성:
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM EXAMPLE_TABLE WITH (READPAST) WHERE PROCESSED = 0 ) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
이 쿼리는 첫 번째를 찾습니다. 잠긴 행을 무시하고 READPAST 힌트를 사용하여 처리되지 않은 행. 그런 다음 PROCESSED를 1로 설정하여 행을 업데이트합니다. OUTPUT 절은 클라이언트에서 처리되는 업데이트된 행을 반환합니다.
테이블 구성:
이를 최적화하려면 접근 방식에서는 테이블이 클러스터형 인덱스의 첫 번째 열인 PROCESSED 열로 구성되어야 합니다. 이렇게 하면 처리 상태에 따라 행이 정렬됩니다.
클러스터형 및 비클러스터형 인덱스:
ID 열의 비클러스터형 인덱스를 고려할 수 있지만 일반적으로 많이 사용되는 대기열에는 권장되지 않습니다. 비클러스터형 인덱스는 추가 오버헤드와 복잡성을 초래할 수 있기 때문입니다.
쿼리 제한 사항:
최적의 성능을 위해서는 대기열 테이블 쿼리가 Dequeue 작업으로 제한되어야 합니다. , Peek 작업을 피하거나 대기열 및 데이터 저장 목적으로 테이블을 사용합니다.
위 내용은 SQL Server 대기열 테이블의 동시 처리를 효율적으로 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!