다음을 통해 공유


쿼리 결과 캐시

적용 대상: ✅Microsoft Fabric

Kusto에는 쿼리 결과 캐시가 포함됩니다. 쿼리를 실행할 때 캐시된 결과를 가져올 수 있습니다. 캐시에서 쿼리 결과를 반환할 수 있으면 쿼리 성능이 향상되고 리소스 사용량이 줄어듭니다. 그러나 이 성능은 결과에서 일부 "부실"을 희생합니다.

캐시 사용

쿼리 결과 캐시를 query_results_cache_max_age 사용하도록 옵션을 쿼리의 일부로 설정합니다. 쿼리 텍스트 또는 클라이언트 요청 속성으로 이 옵션을 설정할 수 있습니다. 예시:

set query_results_cache_max_age = time(5m);
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id

옵션 값은 쿼리 시작 시간에서 측정된 결과 캐시의 최대 "기간"을 나타내는 값입니다 timespan . 설정된 시간 범위 외에 캐시 항목은 사용되지 않으며 다시 사용되지 않습니다. 값을 0으로 설정하는 것은 옵션을 설정하지 않는 것과 같습니다.

쿼리 간 호환성

동일한 쿼리

쿼리 결과 캐시는 이전에 캐시된 쿼리와 "동일"한 것으로 간주되는 쿼리에 대해서만 결과를 반환합니다. 다음 조건이 모두 충족되면 두 쿼리가 동일한 것으로 간주됩니다.

  • 두 쿼리의 표현은 UTF-8 문자열과 동일합니다.
  • 두 쿼리는 동일한 데이터베이스에 대해 이루어집니다.
  • 두 쿼리는 동일한 클라이언트 요청 속성을 공유합니다. 다음 속성은 캐싱 목적으로 무시됩니다.
    • ClientRequestId
    • 애플리케이션
    • 사용자

호환되지 않는 쿼리

다음 조건 중 어느 것이라도 true이면 쿼리 결과가 캐시되지 않습니다.

유효한 캐시 항목 없음

시간 제약 조건을 충족하는 캐시된 결과를 찾을 수 없거나 캐시에 "동일한" 쿼리의 캐시된 결과가 없는 경우 쿼리가 실행되고 해당 결과가 캐시됩니다.

  • 쿼리 실행이 성공적으로 완료되고
  • 쿼리 결과 크기는 16MB를 초과하지 않습니다.

캐시의 결과

서비스는 쿼리 결과가 캐시에서 제공되고 있음을 어떻게 나타내나요? 쿼리에 응답할 때 Kusto는 열과 열을 포함하는 Key 다른 Value 응답 테이블을 보냅니다. 캐시된 쿼리 결과에는 해당 테이블에 다른 행이 추가됩니다.

  • 행의 Key 열에 문자열이 포함됩니다. ServerCache
  • 행의 Value 열에는 두 개의 필드가 있는 속성 모음이 포함됩니다.
    • OriginalClientRequestId - 원래 요청의 ClientRequestId를 지정합니다.
    • OriginalStartedOn - 원래 요청의 실행 시작 시간을 지정합니다.

쿼리 일관성

약한 일관성 사용하는 쿼리는 다른 클러스터 노드에서 처리할 수 있습니다. 캐시는 클러스터 노드에서 공유되지 않으며 모든 노드에는 자체 프라이빗 스토리지에 전용 캐시가 있습니다. 따라서 두 개의 동일한 쿼리가 서로 다른 노드에 배치되면 쿼리가 실행되고 두 노드에서 모두 캐시됩니다. 쿼리 일관성을 affinitizedweakconsistency설정하면 동일한 쿼리 헤드에서 동일한 토지에 있는 약한 일관성 쿼리를 보장하여 캐시 적중률을 높일 수 있습니다. 이는 강력한 일관성사용할 때는 관련이 없습니다.

관리

다음과 같은 관리 및 관찰 명령이 지원됩니다.

  • 쿼리 결과 캐시 표시: 쿼리 결과 캐시와 관련된 통계를 반환합니다.
  • 쿼리 결과 캐시 지우기: 쿼리 결과 캐시를 지웁니다.
  • 쿼리 캐시 항목 새로 고침: 특정 쿼리 캐시 항목은 (OptionQueryResultsCacheForceRefresh)query_results_cache_force_refresh 사용하여 새로 고칠 수 있습니다. 이 명령으로 true설정하면 기존 캐시가 있을 때 쿼리 결과 캐시도 새로 고쳐지도록 합니다. 이 프로세스는 쿼리 결과를 쿼리에 사용할 수 있어야 하는 시나리오에서 유용합니다. 이 속성은 'query_results_cache_max_age'과 함께 사용하고 ClientRequestProperties 개체를 통해 전송해야 합니다. 속성은 'set' 문의 일부일 수 없습니다.

용량

캐시 용량은 현재 클러스터 노드당 1GB로 고정되어 있습니다. 제거 정책은 LRU입니다.

분할된 데이터베이스 수준 쿼리 결과 캐시

라이브 대시보드와 같이 최신 결과가 필요한 시나리오에는 분할된 데이터베이스 수준 쿼리 결과 캐시를 사용할 수 있습니다. 예를 들어 10초마다 실행되고 지난 1시간 동안 실행되는 쿼리는 스토리지(분할) 수준에서 중간 쿼리 결과를 캐싱하는 이점을 활용할 수 있습니다.

분할된 데이터베이스 수준 쿼리 결과 캐시는 사용 중일 때 Query results cache 자동으로 사용하도록 설정됩니다. 동일한 캐시 Query results cache를 공유하므로 동일한 용량 및 제거 정책이 적용됩니다.

구문

set query_results_cache_per_shard; 쿼리

참고 항목

이 옵션은 쿼리 텍스트 또는 클라이언트 요청 속성으로 설정할 수 있습니다.

구문 규칙에 대해 자세히 알아봅니다.

예제

set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id