다음을 통해 공유


결과 집합 캐싱(미리 보기)

적용 대상:✅ Microsoft Fabric의 SQL 분석 엔드포인트 및 웨어하우스

결과 집합 캐싱(미리 보기)은 읽기 대기 시간을 개선하는 패브릭 데이터 웨어하우스 및 Lakehouse SQL 분석 엔드포인트에 대한 기본 제공 성능 최적화입니다.

결과 집합 캐싱은 적용 가능한 SELECT T-SQL 쿼리에 대한 최종 결과 집합을 유지하여 작동하므로 후속 실행에서 "적중" 캐시가 최종 결과 집합만 처리합니다. 이렇게 하면 원래 쿼리의 복잡한 컴파일 및 데이터 처리를 무시하고 후속 쿼리를 더 빠르게 반환할 수 있습니다.

일반적으로 데이터 웨어하우징 시나리오에는 비교적 작은 결과를 생성하기 위해 많은 양의 데이터를 처리하는 분석 쿼리가 포함됩니다. 예를 들어 여러 조인 SELECT 을 포함하고 수백만 개의 데이터 행에서 읽기 및 순서 섞기를 수행하는 쿼리는 몇 행에 불과한 집계를 초래할 수 있습니다. 동일한 분석 쿼리를 반복적으로 트리거하는 경향이 있는 보고서 또는 대시보드와 같은 워크로드의 경우 최종 결과가 동일하게 유지되더라도 동일한 무거운 계산을 여러 번 트리거할 수 있습니다. 결과 집합 캐싱은 거의 동일한 비용으로 이 시나리오와 유사한 시나리오의 성능을 향상시킵니다.

중요합니다

이 기능은 프리뷰 상태입니다.

캐시 자동 관리

결과 집합 캐시는 투명하게 작동합니다. 사용하도록 설정되면 캐시 만들기 및 재사용이 쿼리에 대해 기회적으로 적용됩니다.

결과 집합 캐싱은 SELECT 웨어하우스 테이블의 T-SQL 쿼리, OneLake 원본에 대한 바로 가기 및 비 Azure 원본에 대한 바로 가기에 적용됩니다. 캐시 관리는 자동으로 처리되어 필요에 따라 정기적으로 캐시를 제거합니다.

또한 데이터가 변경되면 이전에 만든 캐시를 무효화하여 결과 일관성을 보장합니다.

결과 집합 캐싱 구성

결과 집합 캐싱은 항목 수준에서 구성할 수 있습니다.

사용하도록 설정하면 필요한 경우 항목 수준 또는 개별 쿼리에서 사용하지 않도록 설정할 수 있습니다.

미리 보기 중에는 모든 항목에 대해 결과 집합 캐싱이 기본적으로 해제됩니다.

항목 수준 구성

ALTER DATABASE SET T-SQL 명령을 사용하여 레이크하우스 또는 웨어하우스에 대한 결과 집합 캐싱을 사용하도록 설정합니다. Lakehouse의 SQL 분석 엔드포인트를 사용하여 T-SQL 쿼리를 연결하고 실행합니다.

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING ON;

설정 값은 sys.databases에서 확인할 수 있습니다. 예를 들어 Fabric Warehouse 또는 Lakehouse SQL 분석 엔드포인트에서 현재 컨텍스트에 대한 값을 확인할 수 있습니다.

SELECT name, is_result_set_caching_on 
FROM sys.databases
WHERE database_id = db_id();

결과 집합 캐싱을 사용하지 않도록 설정하려면 다음을 수행합니다.

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING OFF;

쿼리 수준 구성

항목에서 결과 집합 캐싱을 사용하도록 설정하면 개별 쿼리에 대해 사용하지 않도록 설정할 수 있습니다.

이는 쿼리를 디버깅하거나 A/B를 테스트하는 데 유용할 수 있습니다. 다음의 SELECT끝에 이 힌트를 연결하여 쿼리에 대한 결과 집합 캐싱을 사용하지 않도록 설정합니다.

OPTION ( USE HINT ('DISABLE_RESULT_SET_CACHE') );

결과 집합 캐시 사용량 확인

결과 집합 캐시 사용량은 메시지 출력 및 queryinsights.exec_requests_history 시스템 보기의 두 위치에서 확인할 수 있습니다.

쿼리의 메시지 출력(패브릭 쿼리 편집기 또는 SQL Server Management Studio에 표시됨)에서 쿼리가 기존 결과 집합 캐시를 사용할 수 있는 경우 쿼리 실행 후에 "결과 집합 캐시가 사용되었습니다."라는 문이 표시됩니다.

결과 집합 캐싱이 사용되었음을 보여 주는 쿼리 결과 스크린샷

queryinsights.exec_requests_historyresult_cache_hit 에는 각 쿼리 실행에 대한 결과 집합 캐시 사용량을 나타내는 값이 표시됩니다.

  • 2: 쿼리에서 결과 집합 캐시(캐시 적중)를 사용했습니다.
  • 1: 쿼리가 결과 집합 캐시를 만들었습니다.
  • 0: 결과 집합 캐시 만들기 또는 사용량에 쿼리를 적용할 수 없습니다.

다음은 그 예입니다.

SELECT result_cache_hit, command, *
FROM queryinsights.exec_requests_history
ORDER BY submit_time DESC;

queryinsights.exec_requests_history 보기에서 쿼리를 보여 주는 패브릭 쿼리 편집기 스크린샷

결과 집합 캐싱에 대한 자격을 갖추다

쿼리가 SELECT 실행되면 결과 집합 캐싱에 대해 평가됩니다. 결과 집합 캐시를 만들고 사용할 수 있도록 다양한 요구 사항을 충족해야 합니다. 이러한 중 일부는 캐시 스토리지를 내부 제한에 따라 유지하고, 일부는 복잡한 쿼리에 대한 캐싱을 예약하는 데 도움이 되며, 다른 일부는 반복적인 "적중" 시 결과 정확성을 유지하는 데 도움이 됩니다. 명백한 예는 결과를 캐시하지 않도록 쿼리 SELECTGETDATE() 제한하는 것이지만 Fabric이 결과를 캐시하지 않기로 결정하는 다른 미묘한 경우도 있습니다.

다음 목록에는 Fabric Data Warehouse의 결과 집합 캐시에서 자주 제외되는 조건들이 포함되어 있습니다. 결과 집합 캐시를 만드는 데 쿼리를 적용할 수 없는 경우 다음 이유 중 하나 이상이 원인일 수 있습니다.

  • 결과 집합 캐싱은 현재 연결된 항목에서 사용하도록 설정되지 않았거나 항목에서 사용하도록 설정되어 있지만 쿼리에 힌트가 DISABLE_RESULT_SET_CACHE 포함되어 있습니다.
  • 쿼리는 순수 SELECT하지 않습니다(예 CREATE TABLE AS SELECT : CTAS), SELECT-INTO기타 데이터 수정 언어
  • 쿼리는 시스템 개체, 임시 테이블, 메타데이터 함수를 참조하거나 분산 개체를 참조하지 않습니다.
  • 쿼리는 100,000개 이상의 행이 있는 하나 이상의 테이블을 참조하지 않습니다.
  • 쿼리는 현재 연결된 패브릭 항목 외부의 개체를 참조합니다(예: 데이터베이스 간 쿼리).
  • 쿼리가 명시적 트랜잭션 또는 루프 내에 있습니다 WHILE .
  • 쿼리 출력에는 지원되지 않는 데이터 형식 및/또는 VARCHAR(MAX) 데이터 형식 및/또는 데이터 형식이 VARBINARY(MAX) 포함됩니다. 지원되는 데이터 형식은 Fabric Data Warehouse의 데이터 형식을 참조하세요.
  • 쿼리에 CASTCONVERT 또는 sql_variant 데이터 형식에 대한 참조가 있거나
  • 쿼리에는 런타임 상수(예: CURRENT_USER 또는 GETDATE())가 포함됩니다.
  • 쿼리 결과는 10,000개의 행으로 추정 > 됩니다.
  • 쿼리에는 비결정적 기본 제공 함수, 창 집계 함수 또는 순서가 지정된 함수(예: PARTITION BY … ORDER BY)가 포함됩니다. 결정적 함수 및 비결정적 함수를 참조하세요.
  • 쿼리는 동적 데이터 마스킹, 행 수준 보안 또는 기타 보안 기능을 사용합니다.
  • 쿼리에서 시간 이동 사용
  • 쿼리는 쿼리의 출력에 포함되지 않은 열 또는 식에 ORDER BY를 적용합니다.
  • 세션 수준의 SET 문이 기본값이 아닌 값으로 설정되어 있는 세션에 쿼리가 포함되어 있습니다 (예: QUOTED_IDENTIFIEROFF로 설정).
  • 시스템이 캐시에 대한 내부 제한에 도달했습니다. 백그라운드 캐시 제거 프로세스는 새 캐시를 만들기 전에 공간을 확보합니다.

이러한 규칙은 동일한 쿼리의 후속 실행 시 캐시를 다시 사용할 때에도 적용됩니다. 또한 다음 시나리오에서는 캐시를 사용하지 않을 수 있습니다.

  • 캐시를 만든 이후 참조된 테이블에 대한 모든 변경 내용
  • 메모리 내 및 디스크 캐싱과 유사하게 캐시를 만든 이후 작업 영역이 오프라인 상태가 되었습니다.
  • 사용자에게 쿼리의 개체에 대한 충분한 권한이 없습니다.
  • 쿼리는 원래 쿼리가 실행된 위치와 다른 레이크하우스 또는 웨어하우스 연결에서 호출됩니다. (데이터베이스 간 쿼리는 결과 집합 캐싱에 적합하지 않습니다.)
  • 쿼리는 원래 쿼리와 다른 출력 열, 열 순서 또는 별칭을 사용합니다.
  • 캐시된 쿼리가 24시간 동안 사용되지 않았습니다.

비고

이러한 자격은 결과 집합 캐싱의 최상의 적용을 위해 내부적으로 평가되므로 나중에 업데이트할 수 있음을 명심해야 합니다.