Share via


쿼리 결과 캐시

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으로 설정하는 것은 옵션을 설정하지 않는 것과 같습니다.

쿼리 간 호환성

동일한 쿼리

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

호환되지 않는 쿼리

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

유효한 캐시 항목 없음

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

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

캐시의 결과

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

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

배포

캐시는 클러스터 노드에서 공유되지 않습니다. 모든 노드에는 자체 프라이빗 스토리지에 전용 캐시가 있습니다. 동일한 두 쿼리가 서로 다른 노드에 있으면 쿼리가 실행되고 두 노드에서 캐시됩니다. 이 프로세스는 약한 일관성을 사용하는 경우 발생할 수 있습니다. 쿼리 일관성을 affinitizedweakconsistency로 설정하면 동일한 쿼리 헤드에 동일한 토지인 약한 일관성 쿼리를 가질 수 있으므로 캐시 적중률을 높일 수 있습니다.

관리

지원되는 관리 및 가시성 명령은 다음과 같습니다.

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

용량

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

분할 수준 쿼리 결과 캐시

쿼리 결과 캐시는 정확히 동일한 쿼리가 연속적으로 여러 번 실행되고 약간 오래된 데이터 반환을 허용할 수 있는 경우에 효과적입니다. 그러나 라이브 dashboard 같은 일부 시나리오에는 최신 결과가 필요합니다.

예를 들어 10초마다 실행되고 지난 1시간 동안 실행되는 쿼리는 스토리지(분할된 데이터베이스) 수준에서 중간 쿼리 결과를 캐싱하는 이점을 얻을 수 있습니다.

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

Syntax

setquery_results_cache_per_shard; 쿼리

참고

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

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

예제

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