다음을 통해 공유


패브릭 데이터 웨어하우스의 쿼리 인사이트

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

Microsoft Fabric에서 쿼리 인사이트 기능은 SQL 분석 환경을 향상시키기 위해 확장 가능하고 지속 가능하며 연장 가능한 솔루션입니다. 기록 쿼리 데이터, 집계된 인사이트 및 실제 쿼리 텍스트에 대한 액세스를 사용하여 쿼리 성능을 분석하고 조정할 수 있습니다. QI는 사용자의 컨텍스트에서만 실행되는 쿼리에 대한 정보를 제공하며 시스템 쿼리는 고려되지 않습니다.

쿼리 인사이트 기능은 30일 동안 기록 쿼리 데이터 및 실행 가능 인사이트를 위한 중앙 위치를 제공하여 웨어하우스 또는 SQL 분석 엔드포인트의 성능을 향상시키기 위해 정보에 입각한 결정을 내리는 데 도움이 됩니다. Microsoft Fabric에서 SQL 쿼리를 실행하는 경우 쿼리 인사이트 기능은 실행 데이터를 수집하고 통합하여 유용한 정보를 제공합니다. 관리자, 구성원 및 참가자 역할에 대한 전체 쿼리 텍스트를 볼 수 있습니다.

  • 기록 쿼리 데이터: Query Insights는 쿼리 실행에 대한 기록 데이터를 저장하므로 시간이 지남에 따라 성능 변경을 추적할 수 있습니다. 시스템 쿼리는 쿼리 인사이트에 저장되지 않습니다.
  • 집계된 인사이트: Query Insights는 쿼리 실행 데이터를 장기 실행 쿼리 또는 대부분의 활성 사용자 식별과 같이 더 실행 가능한 인사이트를 집계합니다. 이러한 집계는 쿼리 셰이프를 기반으로 합니다. 자세한 내용은 인사이트를 생성하기 위해 유사한 쿼리를 집계하는 방법을 참조 하세요.
  • Warehouse Insights: 창고의 전반적인 상태를 이해하려면 sql_pool_insights 보기를 사용하십시오. 이 보기는 풀 수준 메트릭 및 압력 지표를 제공하여 리소스 할당을 모니터링하고 풀 전체의 성능 문제를 진단하는 데 도움이 됩니다.

시작하기 전에

기여자 이상의 권한이 있는 프리미엄 용량 작업 영역 내에서 SQL 분석 엔드포인트 또는 웨어하우스에 액세스할 수 있어야 합니다.

쿼리 인사이트는 언제 필요한가요?

쿼리 인사이트 기능은 다음을 포함하여 쿼리 성능 및 데이터베이스 최적화와 관련된 몇 가지 질문과 문제를 해결합니다.

쿼리 성능의 분석

  • 쿼리의 기록 성능은 무엇인가요?
  • 주의가 필요한 장기 실행 쿼리가 있나요?
  • 성능 병목 상태를 유발하는 쿼리를 식별할 수 있나요?
  • 내 쿼리에 캐시가 사용되었나요?
  • CPU를 가장 많이 사용하는 쿼리는 무엇인가요?

쿼리 최적화 및 튜닝

  • 어떤 쿼리가 자주 실행되고 성능이 향상될 수 있나요?
  • 실패했거나 취소된 쿼리를 식별할 수 있나요?
  • 시간 경과에 따라 쿼리 성능의 변경 내용을 추적할 수 있나요?
  • 지속적으로 제대로 수행되지 않는 쿼리가 있나요?

사용자 활동 모니터링

  • 특정 쿼리를 제출한 사람은 누구인가요?
  • 가장 오래 실행되는 쿼리를 사용하는 가장 활동적인 사용자 또는 사용자는 누구인가요?

SQL 풀 및 리소스 모니터링

  • 쿼리를 실행하는 동안 SQL 풀이 압력을 받고 있나요?
  • 지난 24시간 동안 풀이 얼마나 자주 압력을 경험했는지 여부
  • 작업 영역 용량 또는 풀 구성에 대한 최근 변경 내용이 있나요?
  • 가장 높은 리소스 비율을 사용하는 풀은 무엇입니까?
  • 압력 이벤트와 느리게 실행되는 쿼리의 상관 관계를 지정할 수 있나요?
  • 시간 경과에 따른 풀 압력 추세를 식별할 수 있는 방법은 무엇입니까?

다음 시스템 보기는 이러한 질문에 대한 답변을 제공합니다.

쿼리 인사이트는 어디에서 볼 수 있나요?

자동 생성된 보기는 queryinsights웨어하우스 스키마 아래에 있습니다. 예를 들어 웨어하우스 Fabric 탐색기의 스키마, queryinsights, 보기에서 쿼리 인사이트 보기를 찾습니다.

스키마, queryinsights, 보기에서 쿼리 인사이트 보기를 찾을 수 있는 위치를 보여 주는 Fabric 탐색기의 스크린샷

쿼리 실행이 완료되면 연결된 웨어하우스 또는 SQL 분석 엔드포인트의 queryinsights 보기에 해당 실행 데이터가 표시됩니다. 컨텍스트에서 WH_2를 실행하면 쿼리가 WH_2의 쿼리 인사이트에 표시됩니다. 완료된 쿼리는 실행 중인 동시 워크로드에 따라 쿼리 인사이트에 표시되는 데 최대 15분이 걸릴 수 있습니다. 쿼리 인사이트에 쿼리가 표시되는 데 걸리는 시간은 동시 쿼리가 실행될수록 증가합니다.

유사한 쿼리를 집계하여 인사이트를 생성하려면 어떻게 해야 하나요?

쿼리는 조건자가 다를 수 있더라도 쿼리의 모양이 같으면 Query Insights에서 동일하게 간주됩니다.

보기의 query hash 열을 활용하여 유사한 쿼리를 분석하고 각 실행으로 드릴다운할 수 있습니다.

예를 들어 다음 쿼리는 조건자가 매개 변수화된 후 동일하게 간주됩니다.

SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

SELECT * FROM Orders
WHERE OrderDate BETWEEN '2000-07-01' AND '2006-07-31';

예제

지난 30분 동안 사용자가 실행한 쿼리 식별

다음 쿼리에서는 queryinsights.exec_requests_history 및 현재 세션 사용자 이름을 반환하는 기본 제공 USER_NAME() 함수를 사용합니다.

SELECT * FROM queryinsights.exec_requests_history 
WHERE start_time >= DATEADD(MINUTE, -30, GETUTCDATE())
AND login_name = USER_NAME();

CPU 시간별 상위 CPU 사용 쿼리 식별

다음 쿼리는 할당된 CPU 시간으로 상위 100개 쿼리를 반환합니다.

SELECT TOP 100 distributed_statement_id, query_hash, allocated_cpu_time_ms, label, command
FROM queryinsights.exec_requests_history
ORDER BY allocated_cpu_time_ms DESC;

캐시가 아닌 원격에서 대부분의 데이터를 검색하는 쿼리 식별

쿼리 실행 중 대용량 데이터 검색으로 인해 쿼리 속도가 느려지는지 확인하고 그에 따라 쿼리 코드를 조정하도록 결정할 수 있습니다. 이 분석을 통해 다양한 쿼리 실행을 비교하고 검색된 데이터 양의 분산이 성능 변경의 원인인지 식별할 수 있습니다.

또한 캐시의 합계 data_scanned_memory_mb 를 검사하고 data_scanned_disk_mb과거 실행에 대한 캐시와 비교하여 캐시 사용을 평가할 data_scanned_remote_storage_mb 수 있습니다.

참고 항목

검색된 데이터 값은 쿼리 실행의 중간 단계에서 이동한 데이터를 고려하지 않을 수 있습니다. 경우에 따라 이동된 데이터의 크기와 처리하는 데 필요한 CPU의 크기가 스캔한 데이터 값이 나타내는 것보다 클 수 있습니다.

데이터 스캔 값은 0COPY INTO 명령문에서 나타납니다.

SELECT distributed_statement_id, query_hash, data_scanned_remote_storage_mb, data_scanned_memory_mb, data_scanned_disk_mb, label, command
FROM queryinsights.exec_requests_history
ORDER BY data_scanned_remote_storage_mb DESC;

쿼리 텍스트에서 부분 문자열을 사용하여 가장 자주 실행되는 쿼리 식별

다음 쿼리는 성공한 실행 수에 따라 내림차순으로 정렬된 특정 문자열과 일치하는 가장 최근의 쿼리를 반환합니다.

SELECT * FROM queryinsights.frequently_run_queries
WHERE last_run_command LIKE '%<some_label>%'
ORDER BY number_of_successful_runs DESC;

쿼리 텍스트에서 부분 문자열을 사용하여 장기 실행 쿼리 식별

다음 쿼리는 중간 쿼리 실행 시간에 따라 내림차순으로 정렬된 특정 문자열과 일치하는 쿼리를 반환합니다.

SELECT * FROM queryinsights.long_running_queries
WHERE last_run_command LIKE '%<some_label>%'
ORDER BY median_total_elapsed_time_ms DESC;

인사이트 뷰 쿼리