쿼리 결과 캐시
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 문자열과 동일합니다.
- 두 쿼리는 동일한 데이터베이스에 대해 이루어집니다.
- 두 쿼리는 동일한 클라이언트 요청 속성을 공유합니다. 캐싱을 위해 다음 속성이 무시됩니다.
호환되지 않는 쿼리
다음 조건 중 어느 것이라도 true이면 쿼리 결과가 캐시되지 않습니다.
- 쿼리는 RestrictedViewAccess 정책을 사용하도록 설정된 테이블을 참조합니다.
- 쿼리는 RowLevelSecurity 정책을 사용하도록 설정된 테이블을 참조합니다.
- 쿼리는 다음 함수를 사용합니다.
- 쿼리는 외부 테이블 또는 외부 데이터에 액세스합니다.
- 쿼리는 평가 플러그 인 연산자를 사용합니다.
유효한 캐시 항목 없음
시간 제약 조건을 충족하는 캐시된 결과를 찾을 수 없거나 캐시에 "동일한" 쿼리의 캐시된 결과가 없으면 쿼리가 실행되고 결과가 다음과 같이 캐시됩니다.
- 쿼리 실행이 성공적으로 완료되고 및
- 쿼리 결과 크기는 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
set
query_results_cache_per_shard
; 쿼리
참고
이 옵션은 쿼리 텍스트 또는 클라이언트 요청 속성으로 설정할 수 있습니다.
구문 규칙에 대해 자세히 알아봅니다.
예제
set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기