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

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

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

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

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

시작하기 전에

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

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

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

쿼리 성능 분석

  • 쿼리의 기록 성능은 무엇인가요?
  • 주의가 필요한 장기 실행 쿼리가 있나요?
  • 성능 병목 상태를 유발하는 쿼리를 식별할 수 있나요?

쿼리 최적화 및 튜닝

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

사용자 활동 모니터링

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

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

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

자동 생성된 뷰는 SQL 분석 엔드포인트웨어하우스queryinsights스키마 아래에 있습니다. 예를 들어 웨어하우스의 패브릭 탐색기에서 스키마, queryinsights, 뷰 아래에서 쿼리 인사이트 뷰를 찾습니다.

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

쿼리 실행이 완료되면 연결된 웨어하우스 또는 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분 동안 사용자가 실행한 쿼리 식별

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

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

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

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

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;