다음을 통해 공유


쿼리 일관성

쿼리 일관성은 쿼리 및 업데이트가 동기화되는 방법을 나타냅니다. 쿼리 일관성에는 지원되는 두 가지 모드가 있습니다.

  • 강력한 일관성: 강력한 일관성을 통해 데이터 추가, 삭제 및 스키마 수정과 같은 최신 업데이트에 즉시 액세스할 수 있습니다. 강력한 일관성은 기본 일관성 모드입니다. 동기화로 인해 이 일관성 모드는 동시성 측면에서 약한 일관성 모드보다 약간 덜 잘 수행됩니다.

  • 약한 일관성: 일관성이 약하면 쿼리 결과가 최신 데이터베이스 업데이트를 반영하기 전에 지연이 있을 수 있습니다. 일반적으로 이 지연 범위는 1~2분입니다. 약한 일관성은 강력한 일관성보다 더 높은 쿼리 동시성 속도를 지원할 수 있습니다.

예를 들어 1분마다 1,000개의 레코드가 데이터베이스의 테이블에 수집되는 경우 강력한 일관성으로 실행되는 해당 테이블에 대한 쿼리는 가장 최근에 수집된 레코드에 액세스할 수 있는 반면, 약한 일관성으로 실행되는 해당 테이블에 대한 쿼리는 지난 몇 분 동안의 일부 레코드에 액세스하지 못할 수 있습니다.

참고

기본적으로 쿼리는 강력한 일관성으로 실행됩니다. 더 높은 쿼리 동시성을 지원하기 위해 필요한 경우에만 약한 일관성으로 전환하는 것이 좋습니다.

강력한 일관성을 위한 사용 사례

지난 몇 분 동안 데이터베이스에서 발생한 업데이트에 대한 강력한 종속성이 있는 경우 강력한 일관성을 사용합니다.

예를 들어 다음 쿼리는 5분 동안의 오류 레코드 수를 계산하고 개수가 0보다 큰 경고를 트리거합니다. 이 사용 사례는 일관성이 약한 경우처럼 지난 몇 분 동안 수집된 레코드에 액세스할 수 없는 인사이트를 변경할 수 있으므로 강력한 일관성으로 처리하는 것이 가장 좋습니다.

my_table
| where timestamp between(ago(5m)..now())
| where level == "error"
| count

또한 데이터베이스 메타데이터가 큰 경우 강력한 일관성을 사용해야 합니다. instance. 데이터베이스에는 수백만 개의 데이터 익스텐 트가 있으며, 약한 일관성을 사용하면 쿼리 헤드가 영구 스토리지에서 광범위한 메타데이터 아티팩트를 다운로드하고 역직렬화하여 다운로드 및 관련 작업에서 일시적인 오류가 발생할 가능성이 높아집니다.

약한 일관성에 대한 사용 사례

지난 몇 분 동안 데이터베이스에서 발생한 업데이트에 대한 강력한 종속성이 없고 높은 쿼리 동시성이 필요한 경우 약한 일관성을 사용합니다.

예를 들어 다음 쿼리는 지난 90일 동안의 주당 오류 레코드 수를 계산합니다. 지난 몇 분 동안 수집된 레코드에 영향을 주지 않을 수 있으므로 이 경우 약한 일관성이 적절합니다.

my_table
| where timestamp between(ago(90d) .. now())
| where level == "error"
| summarize count() by level, startofweek(Timestamp)

약한 일관성 모드

다음 표에서는 약한 쿼리 일관성의 네 가지 모드를 요약합니다.

Mode Description
임의 쿼리는 약하게 일관된 쿼리 헤드 역할을 할 수 있는 클러스터의 노드 중 하나로 임의로 라우팅됩니다.
데이터베이스별 선호도 동일한 데이터베이스 내의 쿼리는 약하게 일관된 동일한 쿼리 헤드로 라우팅되어 해당 데이터베이스에 대해 일관된 실행을 보장합니다.
쿼리 텍스트별 선호도 쿼리 텍스트 해시가 동일한 쿼리는 약하게 일관된 동일한 쿼리 헤드로 라우팅되므로 쿼리 캐싱을 활용하는 데 유용합니다.
세션 ID별 선호도 세션 ID 해시가 동일한 쿼리는 약하게 일관된 동일한 쿼리 헤드로 라우팅되어 세션 내에서 일관된 실행을 보장합니다.

데이터베이스별 선호도

데이터베이스 모드별 선호도를 통해 동일한 데이터베이스에 대해 실행되는 쿼리가 동일한 버전의 데이터베이스에 대해 실행되도록 할 수 있습니다. 그러나 데이터베이스의 최신 버전일 필요는 없습니다. 이 모드는 특정 데이터베이스 내에서 일관된 실행을 보장하는 것이 중요할 때 유용합니다. 그러나 데이터베이스 전체의 쿼리 수에 불균형이 있는 경우 이 모드로 인해 부하 분산이 고르지 않을 수 있습니다.

쿼리 텍스트별 선호도

쿼리 결과 캐시를 쿼리할 때 쿼리 텍스트 모드별 선호도는 유용합니다. 이 모드는 동일한 ID로 자주 실행되는 반복 쿼리를 동일한 쿼리 헤드로 라우팅하여 캐시된 결과를 활용하고 클러스터의 부하를 줄일 수 있도록 합니다.

세션 ID별 선호도

세션 ID 모드별 선호도를 사용하면 동일한 사용자 활동 또는 세션에 속하는 쿼리가 동일한 버전의 데이터베이스에 대해 실행되도록 할 수 있습니다. 이 모드를 사용하려면 각 쿼리의 클라이언트 요청 속성에서 세션 ID를 명시적으로 지정해야 합니다. 이 모드는 세션 내에서 일관된 실행이 필수적인 시나리오에서 유용합니다.

쿼리 일관성을 지정하는 방법

클라이언트가 요청을 보내거나 서버 쪽 정책을 사용하여 쿼리 일관성 모드를 지정할 수 있습니다. 둘 중 하나로 지정되지 않은 경우 강력한 일관성의 기본 모드가 적용됩니다.

  • 요청을 보내는 클라이언트: 클라이언트 요청 속성을 사용합니다queryconsistency. 이 메서드는 특정 쿼리에 대한 쿼리 일관성 모드를 설정하고 기본값 또는 서버 쪽 정책에 따라 결정되는 전반적인 유효 일관성 모드에는 영향을 주지 않습니다. 자세한 내용은 클라이언트 요청 속성을 참조하세요.

  • 서버 쪽 정책: 쿼리 일관성 정책의 속성을 사용합니다QueryConsistency. 이 메서드는 워크로드 그룹 수준에서 쿼리 일관성 모드를 설정하므로 사용자가 클라이언트 요청 속성에서 일관성 모드를 지정할 필요가 없으며 원하는 일관성 모드를 적용할 수 있습니다. 자세한 내용은 쿼리 일관성 정책을 참조하세요.

참고

Kusto .NET SDK를 사용하는 경우 연결 문자열 통해 쿼리 일관성을 설정할 수 있습니다. 이 설정은 특정 연결 문자열 통해 전송된 모든 쿼리에 적용됩니다. 자세한 내용은 연결 문자열 속성을 참조하세요.