테이블이 대기열 역할을 하는 시나리오에서는 테이블을 구성하고 특정 방식으로 쿼리하는 것이 중요합니다. 이를 통해 여러 클라이언트가 대기열 항목을 동시에 처리할 수 있습니다.
UPDLOCK 및 ROWLOCK과 함께 비관적 행 잠금을 사용하는 경우 한 작업자가 잠금을 획득하고 행을 처리할 수 있습니다. 이 문제를 해결하고 동시 처리를 활성화하려면 다음 접근 방식을 고려하십시오.
OUTPUT 절을 사용한 대기열 구현
OUTPUT 절은 행을 원자적으로 검색하고 수정하는 메커니즘을 제공합니다. . OUTPUT 절을 사용하여 대기열을 구현하는 방법은 다음과 같습니다.
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
이 쿼리는 다음 단계를 원자적으로 수행합니다.
클러스터형 인덱스 최적화
성능을 더욱 최적화하려면 PROCESSED 열에 클러스터형 인덱스를 생성하는 것이 중요합니다. 이렇게 하면 데이터가 처리 순서대로 저장됩니다.
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
비표준 쿼리 방지
최적의 처리량을 위해서는 다음을 사용하여 대기열 테이블을 쿼리하지 않는 것이 중요합니다. 위에서 설명한 대기열 제거 작업 이외의 방법. 추가 목적으로 테이블을 엿보거나 사용하려고 하면 교착 상태가 발생하고 성능이 저하될 수 있습니다.
위 내용은 SQL Server를 여러 클라이언트의 동시 대기열로 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!