sys.dm_db_stats_properties(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

sys.dm_db_stats_properties 동적 관리 기능은 현재 데이터베이스에서 지정된 데이터베이스 객체에 대한 통계를 반환합니다.

파티션된 테이블에 대해서는 유사한 sys.dm_db_incremental_stats_properties도 참고하세요.

구문

sys.dm_db_stats_properties (object_id, stats_id)  

인수

object_id

현재 데이터베이스에 있는 객체의 ID입니다. object_id 지능입니다.

stats_id

지정된 object_id통계 에 대한 ID . sys.stats 동적 관리 뷰에서 통계 ID를 얻을 수 있습니다. stats_id 지능입니다.

반환된 테이블

열 이름 데이터 형식 설명
object_id int 객체의 ID(테이블 또는 인덱스 뷰)를 사용합니다.
stats_id int 통계 개체의 ID입니다. 테이블 또는 인덱싱된 뷰 내에서 고유합니다. 자세한 내용은 sys.stats(Transact-SQL)를 참조하세요.
last_updated datetime2 통계 개체가 마지막으로 업데이트된 날짜 및 시간입니다. 자세한 내용은 이 문서의 설명 섹션을 참조하세요.
rows bigint 통계가 마지막으로 업데이트되었을 때 테이블 또는 인덱싱된 뷰의 총 행 수입니다. 통계가 필터링되거나 필터링된 인덱스에 해당하는 경우 행 수가 테이블의 행 수보다 적을 수 있습니다.
rows_sampled bigint 통계 계산을 위해 샘플링된 전체 행 수입니다.
steps int 히스토그램의 총 단계 수입니다. 자세한 내용은 DBCC SHOW_STATISTICS(Transact-SQL)를 참조하세요.
unfiltered_rows bigint 필터링된 통계의 필터 식을 적용하기 전 테이블의 전체 행 수입니다. 통계가 필터링되지 않으면, unfiltered_rows 는 열에 반환 rows 되는 값과 같습니다.
modification_counter bigint 통계가 마지막으로 업데이트된 이후 선행 통계 열(히스토그램이 작성된 열)에 대한 총 수정 횟수입니다.

메모리 최적화 테이블: SQL Server 2016(13.x)을 시작하고 Azure SQL Database에서 이 열에는 통계가 마지막으로 업데이트되었거나 데이터베이스가 다시 시작된 이후 테이블에 대한 총 수정 횟수가 포함됩니다.
persisted_sample_percent float 샘플링 비율을 명시적으로 지정하지 않는 통계 업데이트에 사용되는 지속형 샘플 백분율입니다. 값이 0이면 이 통계에 대해 지속 된 샘플 백분율이 설정되지 않습니다.

적용 대상: SQL Server 2016 (13.x) SP1 CU4 및 이후 버전

설명

이 함수는 sys.dm_db_stats_properties 다음 조건 중 하나에서 빈 행셋을 반환합니다:

  • object_id 또는 stats_id .입니다 NULL.
  • 지정된 객체가 보이지 않거나 테이블이나 인덱스 뷰에 해당하지 않습니다.
  • 지정된 통계 ID는 지정된 객체 ID의 기존 통계와 일치하지 않습니다.
  • 현재 사용자는 통계 객체를 볼 권한이 없습니다.

이 동작은 와 sys.stats같은 sys.objects 뷰에서 행에 교차 적용 시 의 sys.dm_db_stats_properties 안전한 사용을 가능하게 합니다.

통계 업데이트 날짜는 히스토그램밀도 벡터와 함께 메타데이터가 아닌 통계 BLOB 개체에 저장됩니다. 통계 데이터를 생성하기 위해 데이터를 읽지 않으면 통계 Blob이 만들어지지 않고 날짜를 사용할 수 없으며 열이 last_updated 됩니다 NULL. 이 조건은 술어가 행을 반환하지 않는 필터링된 통계나 새로운 빈 테이블에 적용됩니다.

사용 권한

통계 열에 대한 권한이 필요 SELECT 하거나, 테이블을 소유하거나, 고정 서버 역할, db_owner 고정 데이터베이스 역할, db_ddladmin 고정 데이터베이스 역할의 멤버 sysadmin 여야 합니다.

예제

A. 간단한 예

다음 예시는 데이터베이스 내 AdventureWorks 테이블의 Person.Person 통계 정보를 반환합니다.

SELECT * FROM sys.dm_db_stats_properties (object_id('Person.Person'), 1);

B. 테이블의 모든 통계 속성을 반환합니다

다음 예시는 테이블 Sales.SalesOrderDetail에 존재하는 모든 통계량의 속성을 반환합니다.

SELECT 
    OBJECT_SCHEMA_NAME(stat.object_id) AS schema_name,
    OBJECT_NAME(stat.object_id)        AS table_name,
    sp.stats_id, 
    stat.[name], 
    stat.filter_definition, 
    sp.last_updated, 
    sp.[rows], 
    sp.rows_sampled, 
    sp.steps,
    sp.unfiltered_rows, 
    sp.modification_counter   
FROM sys.stats AS stat   
OUTER APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp  
WHERE stat.object_id = OBJECT_ID(N'Sales.SalesOrderDetail')

C. 자주 수정된 객체의 통계 속성 반환

다음 예시는 마지막 통계 업데이트 이후 선두 열이 1,000회 이상 수정된 현재 데이터베이스의 모든 테이블, 인덱스 뷰, 통계값을 반환합니다.

SELECT 
    OBJECT_SCHEMA_NAME(obj.[object_id]) AS schema_name,
    obj.[name],
    stat.[name],
    stat.stats_id, 
    sp.last_updated, 
    sp.modification_counter  
FROM sys.objects AS obj   
INNER JOIN sys.stats AS stat ON stat.object_id = obj.object_id  
OUTER APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp  
WHERE sp.modification_counter > 1000;