테이블이 대기열 역할을 하는 시나리오에서는 테이블을 구성하고 특정 방식으로 쿼리하는 것이 중요합니다. 여러 클라이언트가 대기열 항목을 동시에 처리할 수 있게 해줍니다.
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);
비표준 쿼리 방지
최적의 처리량을 위해서는 위에 설명된 대기열 제거 작업 이외의 방법을 사용하여 대기열 테이블을 쿼리하지 않는 것이 중요합니다. 추가 목적으로 테이블을 확인하거나 사용하려고 하면 교착 상태가 발생하고 성능이 저하될 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3