다음을 통해 공유


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

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

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

통계를 사용하는 방법

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

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

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

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

수동 통계 유지 관리의 예

CustomerKey의 모든 행을 기반으로 dbo.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에서 수동으로 만들고 자동으로 만든 통계를 확인할 수도 있습니다.

쿼리의 자동 통계

쿼리 및 쿼리 최적화 프로그램에서 계획 탐색에 대한 통계가 필요할 때마다 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 
LEFT JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
LEFT 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;

이제 자동으로 생성된 히스토그램 통계(statistics_name 같은 것이어야 함)의 _WA_Sys_00000007_3B75D760을(를) 찾고 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에 나타날 수 있습니다. 이러한 개체는 쿼리 최적화에 사용되지 않습니다.