결과 세트 캐싱을 사용한 성능 조정Performance tuning with result set caching

결과 세트 캐싱을 사용하도록 설정한 경우 Synapse SQL은 반복 사용을 위해 사용자 데이터베이스에 쿼리 결과를 자동으로 캐시합니다.When result set caching is enabled, Synapse SQL automatically caches query results in the user database for repetitive use. 이렇게 하면 후속 쿼리 실행 시 지속형 캐시에서 직접 결과를 가져올 수 있으므로 재계산이 필요하지 않습니다.This allows subsequent query executions to get results directly from the persisted cache so recomputation is not needed. 결과 세트 캐싱은 쿼리 성능을 향상시키고 컴퓨팅 리소스 사용량을 줄입니다.Result set caching improves query performance and reduces compute resource usage. 또한 캐시된 결과 세트를 사용하는 쿼리는 동시성 슬롯을 사용하지 않으므로 기존 동시성 제한이 적용되지 않습니다.In addition, queries using cached results set do not use any concurrency slots and thus do not count against existing concurrency limits. 보안을 위해 캐시된 결과를 만든 사용자와 동일한 데이터 액세스 권한이 있는 경우에만 캐시된 결과에 액세스할 수 있습니다.For security, users can only access the cached results if they have the same data access permissions as the users creating the cached results.

주요 명령Key commands

사용자 데이터베이스에 대한 결과 세트 캐싱 설정/해제Turn ON/OFF result set caching for a user database

세션에 대한 결과 세트 캐싱 설정/해제Turn ON/OFF result set caching for a session

캐시된 결과 세트의 크기 확인Check the size of cached result set

캐시 정리Clean up the cache

캐시되지 않는 내용What's not cached

데이터베이스에 대해 결과 집합 캐싱이 켜진 경우, 다음 쿼리를 제외하고 캐시가 가득 찰 때까지 모든 쿼리에 대해 결과가 캐시됩니다.Once result set caching is turned ON for a database, results are cached for all queries until the cache is full, except for these queries:

  • 비결정적 함수(예: DateTime.Now())를 사용하여 쿼리Queries using non-deterministic functions such as DateTime.Now()
  • 사용자 정의 함수를 사용하여 쿼리Queries using user defined functions
  • 행 수준 보안 또는 열 수준 보안이 설정된 테이블을 사용하는 쿼리Queries using tables with row level security or column level security enabled
  • 행 크기가 64KB보다 큰 데이터를 반환하는 쿼리Queries returning data with row size larger than 64KB
  • 크기가 큰 데이터(10GB 초과)를 반환하는 쿼리Queries returning large data in size (>10GB)

중요

결과 세트 캐시를 만들고 캐시에서 데이터를 검색하는 작업은 Synapse SQL 풀 인스턴스의 컨트롤 노드에서 수행됩니다.The operations to create result set cache and retrieve data from the cache happen on the control node of a Synapse SQL pool instance. 결과 세트 캐싱이 켜져 있을 때 큰 결과 세트(예: 1GB 초과)를 반환하는 쿼리를 실행하면 제어 노드에서 제한이 증가하고 인스턴스의 전체 쿼리 응답 속도가 느려질 수 있습니다.When result set caching is turned ON, running queries that return large result set (for example, >1GB) can cause high throttling on the control node and slow down the overall query response on the instance. 이러한 쿼리는 일반적으로 데이터 탐색 또는 ETL 작업 중에 사용됩니다.Those queries are commonly used during data exploration or ETL operations. 컨트롤 노드의 스트레스를 방지하고 성능 문제가 발생하는 것을 방지하려면 사용자는 해당 유형의 쿼리를 실행하기 전에 데이터베이스에서 결과 집합 캐싱을 해제해야 합니다.To avoid stressing the control node and cause performance issue, users should turn OFF result set caching on the database before running those types of queries.

쿼리에 대한 결과 세트 캐싱 작업에 소요된 시간 동안 다음 쿼리를 실행합니다.Run this query for the time taken by result set caching operations for a query:

SELECT step_index, operation_type, location_type, status, total_elapsed_time, command
FROM sys.dm_pdw_request_steps
WHERE request_id  = <'request_id'>;

다음은 결과 세트 캐싱을 사용하지 않도록 설정한 상태로 실행되는 쿼리의 예제 출력입니다.Here is an example output for a query executed with result set caching disabled.

위치 유형 및 명령을 포함 하 여 쿼리 결과를 보여 주는 스크린샷

다음은 결과 세트 캐싱을 사용하도록 설정한 상태로 실행되는 쿼리의 예제 출력입니다.Here is an example output for a query executed with result set caching enabled.

스크린샷은 선택 된 명령을 사용 하 여 쿼리 결과를 보여 줍니다. * from [D W ResultCache D b] 점 D b o는 out 이라고 합니다.

캐시된 결과가 사용되는 경우When cached results are used

캐시된 결과 집합은 다음 요구 사항이 모두 충족되는 경우 쿼리에 다시 사용됩니다.Cached result set is reused for a query if all of the following requirements are all met:

  • 쿼리를 실행하는 사용자는 쿼리에서 참조된 모든 테이블에 액세스할 수 있습니다.The user who's running the query has access to all the tables referenced in the query.
  • 새 쿼리와 결과 집합 캐시를 생성한 이전 쿼리가 정확히 일치합니다.There is an exact match between the new query and the previous query that generated the result set cache.
  • 캐시된 결과 집합이 생성된 테이블에는 데이터 또는 스키마 변경 내용이 없습니다.There is no data or schema changes in the tables where the cached result set was generated from.

이 명령을 실행하여 결과 캐시 적중 또는 누락으로 쿼리를 실행했는지 확인합니다.Run this command to check if a query was executed with a result cache hit or miss. result_cache_hit 열은 캐시 적중 시 1을 반환하고, 캐시 누락 시 0을 반환하고, 결과 집합 캐싱이 사용되지 않은 이유에 대해 음수 값을 반환합니다.The result_cache_hit column returns 1 for cache hit, 0 for cache miss, and negative values for reasons why result set caching was not used. 자세한 내용은 sys.dm_pdw_exec_requests를 참조하세요.Check sys.dm_pdw_exec_requests for details.

SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>

캐시된 결과 관리Manage cached results

결과 세트 캐시의 최대 크기는 데이터베이스당 1TB입니다.The maximum size of result set cache is 1 TB per database. 기본 쿼리 데이터가 변경되면 캐시된 결과가 자동으로 무효화됩니다.The cached results are automatically invalidated when the underlying query data change.

캐시 제거는 다음 일정에 따라 Synapse SQL에서 자동으로 관리됩니다.The cache eviction is managed by Synapse SQL automatically following this schedule:

  • 결과 세트가 사용되지 않았거나 무효화된 경우 48시간 간격으로Every 48 hours if the result set hasn't been used or has been invalidated.
  • 결과 세트 캐시가 최대 크기에 가까워질 때When the result set cache approaches the maximum size.

다음 옵션 중 하나를 사용하여 전체 결과 세트 캐시를 수동으로 비울 수 있습니다.Users can manually empty the entire result set cache by using one of these options:

  • 데이터베이스에 대한 결과 집합 캐시 기능을 해제Turn OFF the result set cache feature for the database
  • 데이터베이스에 연결된 상태에서 DBCC DROPRESULTSETCACHE 실행Run DBCC DROPRESULTSETCACHE while connected to the database

데이터베이스를 일시 중지해도 캐시된 결과 세트가 비워지지 않습니다.Pausing a database won't empty cached result set.

다음 단계Next steps

더 많은 개발 팁은 개발 개요를 참조하세요.For more development tips, see development overview.