적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric의 SQL 데이터베이스
현재 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입니다. 이 경우는 조건자가 행을 반환하지 않는 필터링된 통계 또는 빈 테이블에 대해 필터링된 통계에 해당하는 경우입니다.
사용 권한
사용자에게 통계 열에 대한 선택 권한이 있거나 사용자가 테이블을 소유하거나 sysadmin 고정 서버 역할, db_owner 고정 데이터베이스 역할 또는 db_ddladmin 고정 데이터베이스 역할의 멤버여야 합니다.
예제
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)