패브릭 데이터 웨어하우징의 통계

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

Microsoft Fabric의 Warehouse는 쿼리 엔진을 사용하여 지정된 SQL 쿼리에 대한 실행 계획을 만듭니다. 쿼리를 제출할 때 쿼리 최적화 프로그램은 가능한 모든 계획을 열거하고 가장 효율적인 후보를 선택하려고 합니다. 최소 오버헤드(I/O, CPU, 메모리)가 필요한 계획을 결정하려면 엔진이 각 연산자에서 처리될 수 있는 작업량 또는 행의 양을 평가할 수 있어야 합니다. 그런 다음 각 계획의 비용에 따라 예상 작업량이 가장 적은 계획을 선택합니다. 통계는 쿼리 최적화 프로그램에서 이러한 비용을 예측할 수 있도록 데이터에 대한 관련 정보를 포함하는 개체입니다.

통계를 활용하는 방법

최적의 쿼리 성능을 얻으려면 정확한 통계를 사용하는 것이 중요합니다. Microsoft Fabric은 현재 관련 및 최신 통계를 제공하기 위해 다음 경로를 지원합니다.

모든 테이블에 대한 수동 통계

통계 상태를 기본 기존 옵션은 Microsoft Fabric에서 사용할 수 있습니다. 사용자는 각각 CREATE STATISTICS, UPDATE STATISTICS 및 DROP STATISTICS를 사용하여 히스토그램 기반 단일 열 통계를 만들고, 업데이트하고, 삭제할 수 있습니다. 사용자는 DBCC SHOW_STATISTICS 히스토그램 기반 단일 열 통계의 내용을 볼 수도 있습니다. 현재 이러한 문의 제한된 버전이 지원됩니다.

  • 통계를 수동으로 만드는 경우 쿼리 워크로드에 많이 사용되는 통계(특히 GROUP BY, ORDER BY, 필터 및 JON)에 중점을 두는 것이 좋습니다.
  • 데이터의 행 개수 또는 분포를 크게 변경하는 데이터 변경 후 정기적으로 열 수준 통계를 업데이트하는 것이 좋습니다.

수동 통계 기본 테넌트 예

CustomerKeydbo.DimCustomer 모든 행을 기반으로 테이블에 대한 통계를 만들려면 다음을 수행합니다.

CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;

대규모 데이터 업데이트 후 통계 개체 DimCustomer_CustomerKey_FullScan를 수동으로 업데이트하려면 다음을 수행합니다.

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

통계 개체에 대한 정보를 표시하려면 다음을 수행합니다.

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");

통계 개체의 히스토그램에 대한 정보만 표시하려면 다음을 수행합니다.

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;

통계 개체 DimCustomer_CustomerKey_FullScan를 수동으로 삭제하려면:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

다음 T-SQL 개체를 사용하여 Microsoft Fabric에서 수동으로 만들고 자동으로 만든 통계를 모두 검사 수 있습니다.

  • sys.stats 카탈로그 뷰
  • sys.stats_columns 카탈로그 뷰
  • STATS_DATE 시스템 함수

쿼리의 자동 통계

쿼리를 실행하고 쿼리 최적화 프로그램에서 계획 탐색에 대한 통계가 필요할 때마다 Microsoft Fabric은 해당 통계가 아직 없는 경우 자동으로 해당 통계를 만듭니다. 통계가 만들어지면 쿼리 최적화 프로그램에서 이를 활용하여 트리거 쿼리의 계획 비용을 예측할 수 있습니다. 또한 쿼리 엔진에서 쿼리와 관련된 기존 통계가 더 이상 데이터를 정확하게 반영하지 않는다고 판단하면 해당 통계가 자동으로 새로 고쳐집니다. 이러한 자동 작업은 동기적으로 수행되므로 필요한 통계가 아직 없거나 마지막 통계 새로 고침 이후 중요한 데이터 변경이 발생한 경우 쿼리 기간이 이 시간을 포함할 것으로 예상할 수 있습니다.

쿼리 시간에 자동 통계 확인

일부 유형의 자동 통계를 예상할 수 있는 다양한 경우가 있습니다. 가장 일반적인 통계는 GROUP BYs, JOIN, DISTINCT 절, 필터(WHERE 절) 및 ORDER BY에서 참조되는 열에 대한 쿼리 최적화 프로그램에서 요청하는 히스토그램 기반 통계입니다. 예를 들어 이러한 통계의 자동 생성을 확인하려는 경우 통계가 아직 없는 경우 쿼리가 생성을 COLUMN_NAME 트리거합니다. 예시:

SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;

이 경우 통계 COLUMN_NAME 가 생성되어야 합니다. 열이 varchar 열인 경우 평균 열 길이 통계도 생성됩니다. 통계가 자동으로 생성되었는지 확인하려면 다음 쿼리를 실행할 수 있습니다.

select
    object_name(s.object_id) AS [object_name],
    c.name AS [column_name],
    s.name AS [stats_name],
    s.stats_id,
    STATS_DATE(s.object_id, s.stats_id) AS [stats_update_date], 
    s.auto_created,
    s.user_created,
    s.stats_generation_method_desc 
FROM sys.stats AS s 
INNER JOIN sys.objects AS o 
ON o.object_id = s.object_id 
INNER JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
INNER JOIN sys.columns AS c 
ON sc.object_id = c.object_id 
AND c.column_id = sc.column_id
WHERE o.type = 'U' -- Only check for stats on user-tables
    AND s.auto_created = 1
    AND o.name = '<YOUR_TABLE_NAME>'
ORDER BY object_name, column_name;

이 쿼리는 열 기반 통계만 찾습니다. 이 테이블에 대해 존재하는 모든 통계를 보려면 JON sys.stats_columnssys.columns을 제거하고

이제 자동으로 생성된 히스토그램 통계(예_WA_Sys_00000007_3B75D760: )를 찾고 statistics_name 다음 T-SQL을 실행할 수 있습니다.

DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');

예시:

DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');

DBCC SHOW_STATISTICS 결과 집합의 값은 Updated 원래 GROUP BY 쿼리를 실행한 날짜와 유사한 날짜(UTC)여야 합니다.

그러면 자동으로 생성된 이러한 통계를 쿼리 엔진에서 후속 쿼리에서 활용하여 계획 비용 및 실행 효율성을 향상시킬 수 있습니다. 테이블에서 충분한 변경이 발생하면 쿼리 엔진도 해당 통계를 새로 고쳐 쿼리 최적화를 개선합니다. 표를 크게 변경한 후 이전의 동일한 샘플 연습을 적용할 수 있습니다. Fabric에서 SQL 쿼리 엔진은 SQL Server 2016(13.x)과 동일한 다시 컴파일 임계값을 사용하여 통계를 새로 고칩니다.

자동으로 생성된 통계 유형

Microsoft Fabric에는 쿼리 계획을 개선하기 위해 엔진에서 자동으로 생성되는 여러 유형의 통계가 있습니다. 현재는 모두 실행 가능한 것은 아니지만 sys.stats에서 찾을 수 있습니다.

  • 히스토그램 통계
    • 쿼리 시 히스토그램 통계가 필요한 열당 생성됨
    • 이러한 개체에는 특정 열의 분포와 관련된 히스토그램 및 밀도 정보가 포함됩니다. Azure Synapse Analytics 전용 풀의 쿼리 타임에 자동으로 생성된 통계와 유사합니다.
    • 이름은 .로 _WA_Sys_시작합니다.
    • DBCC SHOW_STATISTICS 콘텐츠를 볼 수 있습니다.
  • 평균 열 길이 통계
    • 쿼리 시간에 평균 열 길이가 필요한 100보다 큰 변수 문자 열(varchar)에 대해 생성됩니다.
    • 이러한 개체에는 통계를 만들 때 varchar 열의 평균 행 크기를 나타내는 값이 포함됩니다.
    • 이름은 .로 ACE-AverageColumnLength_시작합니다.
    • 콘텐츠를 볼 수 없으며 사용자가 실행할 수 없습니다.
  • 테이블 기반 카드 통계
    • 쿼리 타임에 카드진수 예측이 필요한 테이블당 생성됩니다.
    • 이러한 개체에는 테이블의 행 수에 대한 예상값이 포함됩니다.
    • 이름이 지정되었습니다 ACE-Cardinality.
    • 콘텐츠를 볼 수 없으며 사용자가 실행할 수 없습니다.

제한 사항

  • 단일 열 히스토그램 통계만 수동으로 만들고 수정할 수 있습니다.
  • 다중 열 통계 생성은 지원되지 않습니다.
  • 수동으로 만든 통계와 자동으로 생성된 통계를 제외하고 다른 통계 개체가 sys.stats에 나타날 수 있습니다. 이러한 개체는 쿼리 최적화에 사용되지 않습니다.