다음을 통해 공유


Fabric 데이터 웨어하우징의 쿼리 인사이트

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

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

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

  • 기록 쿼리 데이터: 쿼리 인사이트 기능은 쿼리 실행에 대한 기록 데이터를 저장하므로 시간 경과에 따른 성능 변경을 추적할 수 있습니다. 시스템 쿼리는 쿼리 인사이트에 저장되지 않습니다.
  • 집계된 인사이트: 쿼리 인사이트 기능은 쿼리 실행 데이터를 장기 실행 쿼리 또는 대부분의 활성 사용자 식별과 같이 더 실행 가능한 인사이트로 집계합니다. 이러한 집계는 쿼리 셰이프를 기반으로 합니다. 자세한 내용은 인사이트를 생성하기 위해 유사한 쿼리를 집계하는 방법을 참조 하세요.

시작하기 전에

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

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

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

쿼리 성능 분석

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

쿼리 최적화 및 튜닝

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

사용자 활동 모니터링

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

이러한 질문에 대한 답변을 제공하는 세 가지 시스템 보기가 있습니다.

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

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

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

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

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

쿼리는 조건자가 다를 수 있더라도 셰이프가 같으면 쿼리 인사이트에서 동일하게 간주됩니다.

보기의 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 크기가 스캔한 데이터 값보다 클 수 있습니다.

데이터 검색 값은 0 항목에 대해 COPY 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;