sys.dm_db_stats_properties(Transact-SQL)
적용 대상: SQL ServerAzure SQL Database Azure SQL Managed Instance
현재 SQL Server 데이터베이스에서 지정된 데이터베이스 개체(테이블 또는 인덱싱된 뷰)에 대한 통계 속성을 반환합니다. 분할된 테이블의 경우 유사한 sys.dm_db_incremental_stats_properties 참조하세요.
구문
sys.dm_db_stats_properties (object_id, stats_id)
인수
object_id
현재 데이터베이스에서 해당 통계 중 하나의 속성이 요청되는 개체의 ID입니다. object_id 는 int입니다.
stats_id
지정된 object_id 대한 통계 ID입니다. 통계 ID는 sys.stats 동적 관리 뷰에서 가져올 수 있습니다 . stats_id int입니다.
반환된 테이블
열 이름 | 데이터 형식 | 설명 |
---|---|---|
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 행 열의 값 반환과 같습니다. |
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.objects 및 sys.stats와 같은 뷰의 행에 교차 적용할 때 sys.dm_db_stats_properties 안전하게 사용할 수 있습니다.
통계 업데이트 날짜는 히스토그램 및 밀도 벡터와 함께 메타데이터가 아닌 통계 BLOB 개체에 저장됩니다. 통계 데이터를 생성하기 위해 데이터를 읽지 않으면 통계 Blob이 생성되지 않고 날짜를 사용할 수 없으며 last_updated 열이 NULL입니다. 이 경우는 조건자가 행을 반환하지 않는 필터링된 통계 또는 빈 테이블에 대해 필터링된 통계에 해당하는 경우입니다.
사용 권한
사용자에게 통계 열에 대한 선택 권한이 있거나 사용자가 테이블을 소유하거나 사용자가 고정 서버 역할, db_owner
고정 데이터베이스 역할 또는 db_ddladmin
고정 데이터베이스 역할의 sysadmin
멤버인지를 지정해야 합니다.
예제
A. 간단한 예
다음 예제에서는 AdventureWorks 데이터베이스의 Person.Person
테이블에 대한 통계를 반환합니다.
SELECT * FROM sys.dm_db_stats_properties (object_id('Person.Person'), 1);
B. 테이블에 대한 모든 통계 속성 반환
다음 예제에서는 테이블 TEST에 대해 존재하는 모든 통계의 속성을 반환합니다.
SELECT sp.stats_id, name, filter_definition, last_updated, rows, rows_sampled, steps, unfiltered_rows, modification_counter
FROM sys.stats AS stat
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp
WHERE stat.object_id = object_id('TEST');
C. 빈번하게 수정되는 개체의 통계 속성 반환
다음 예제에서는 마지막 통계 업데이트 이후 선행 열이 1000번 이상 수정된 현재 데이터베이스의 모든 테이블, 인덱싱된 뷰 및 통계를 반환합니다.
SELECT obj.name, obj.object_id, stat.name, stat.stats_id, last_updated, modification_counter
FROM sys.objects AS obj
INNER JOIN sys.stats AS stat ON stat.object_id = obj.object_id
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp
WHERE modification_counter > 1000;
참고 항목
DBCC SHOW_STATISTICS(Transact-SQL)
sys.stats(Transact-SQL)
개체 관련 동적 관리 뷰 및 함수(Transact-SQL)
동적 관리 뷰 및 함수(Transact-SQL)
sys.dm_db_incremental_stats_properties (Transact-SQL)
sys.dm_db_stats_histogram (Transact-SQL)