"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > SQL Server를 여러 클라이언트의 동시 대기열로 어떻게 사용할 수 있습니까?

SQL Server를 여러 클라이언트의 동시 대기열로 어떻게 사용할 수 있습니까?

2024년 12월 23일에 게시됨
검색:175

How Can SQL Server Be Used as a Concurrent Queue for Multiple Clients?

여러 클라이언트에서 SQL Server를 동시 대기열로 사용

테이블이 대기열 역할을 하는 시나리오에서는 테이블을 구성하고 특정 방식으로 쿼리하는 것이 중요합니다. 여러 클라이언트가 대기열 항목을 동시에 처리할 수 있게 해줍니다.

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.*;

이 쿼리는 다음 단계를 원자적으로 수행합니다.

  1. WITH(READPAST) 힌트를 사용하여 잠긴 행을 건너뜁니다.
  2. 맨 위 항목을 선택합니다. PROCESSED=0인 행.
  3. 선택한 행을 업데이트하여 처리된 것으로 표시합니다. (PROCESSED=1).
  4. 작업자가 처리하는 데 사용할 수 있는 업데이트된 행을 출력합니다.

클러스터형 인덱스 최적화

성능을 더욱 최적화하려면 PROCESSED 열에 클러스터형 인덱스를 만드는 것이 중요합니다. 이렇게 하면 데이터가 처리 순서대로 저장됩니다.

CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);

비표준 쿼리 방지

최적의 처리량을 위해서는 위에 설명된 대기열 제거 작업 이외의 방법을 사용하여 대기열 테이블을 쿼리하지 않는 것이 중요합니다. 추가 목적으로 테이블을 확인하거나 사용하려고 하면 교착 상태가 발생하고 성능이 저하될 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3