동시 다중 클라이언트 처리를 통해 SQL Server를 DB 대기열로 사용
여러 클라이언트에서 동시에 대기열의 명령을 효율적으로 처리할 수 있는 용량은 다음과 같습니다. SQL Server를 데이터베이스 큐로 사용할 때 필수적입니다. 이를 달성하려면 특정 구성 및 쿼리 최적화를 구현해야 합니다.
한 가지 접근 방식은 다음과 같은 쿼리와 함께 비관적 잠금을 사용하는 것입니다.
select top 1 COMMAND from EXAMPLE_TABLE with (UPDLOCK, ROWLOCK) where PROCESSED=false;
그러나 이 전략은 여러 간의 경합으로 이어질 수 있습니다. 동일한 행 잠금을 획득하려고 시도하는 작업자. 보다 효과적인 해결책은 SQL Server 2005에 도입된 OUTPUT 절을 활용하는 것입니다.
OUTPUT 절은 원자성 대기열 제거 작업을 허용합니다. 단일 작업으로 적절한 행 찾기, 잠긴 행 건너뛰기, 선택한 행을 대기열에서 제거된 것으로 표시하는 작업이 용이해집니다.
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
최적의 성능을 위해서는 가장 왼쪽에 있는 클러스터형 인덱스 키를 사용하여 테이블을 구성하는 것이 중요합니다. 처리된 열입니다. ID가 기본 키로 존재하는 경우 클러스터형 키의 두 번째 열로 이동해야 합니다. 또한 대기열을 통해 비클러스터형 인덱스를 사용하지 않는 것이 좋습니다.
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
또한 테이블을 엿보기 작업이나 대기열과 저장소로서의 이중 용도로 사용하지 않는 것이 중요합니다. 이러한 방식으로 인해 교착 상태가 발생하고 처리량이 감소할 수 있습니다.
원자성 대기열 제거 프로세스를 준수하고 READPAST 힌트를 활용하고 적절하게 구조화된 테이블을 구현하면 SQL Server를 사용할 때 극도의 동시 로드에서도 높은 처리량을 달성할 수 있습니다. 여러 클라이언트가 있는 DB 대기열로 사용됩니다.
위 내용은 SQL Server는 어떻게 여러 클라이언트에 걸친 동시 대기열 처리를 효율적으로 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!