DBAtlas · 데이터베이스 운영 아틀라스

통계 상태: 언제 갱신되었고 몇 행이 변경되었나

SQL Server유지보수

명령어

USE [Musteri];
SELECT OBJECT_SCHEMA_NAME(s.object_id) AS schema_name,
       OBJECT_NAME(s.object_id)        AS table_name,
       s.name                          AS stats_name,
       s.auto_created, s.has_filter, s.no_recompute,
       sp.last_updated,
       sp.rows, sp.rows_sampled,
       CAST(100.0 * sp.rows_sampled / NULLIF(sp.rows, 0) AS DECIMAL(5,1))         AS sample_pct,
       sp.modification_counter,
       CAST(100.0 * sp.modification_counter / NULLIF(sp.rows, 0) AS DECIMAL(9,1)) AS modified_pct,
       CAST(CASE WHEN 500 + 0.20 * sp.rows < SQRT(1000.0 * sp.rows) THEN 500 + 0.20 * sp.rows
                 ELSE SQRT(1000.0 * sp.rows) END AS BIGINT)                       AS auto_update_threshold,
       sp.persisted_sample_percent
FROM   sys.stats s
  CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) sp
WHERE  OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1
ORDER BY sp.modification_counter DESC;

SELECT name, is_auto_create_stats_on, is_auto_update_stats_on, is_auto_update_stats_async_on
FROM   sys.databases
WHERE  name = DB_NAME();

하는 일

각 통계의 마지막 갱신 시각, 샘플링 비율, 마지막 갱신 이후 수정된 행 수, auto update가 실행되는 임계값(compat 130+의 동적 임계값)을 보여 준다.

사용 시점

추정 행 수와 실제 행 수의 차이가 큰 실행 계획, 대량 데이터 적재 후, 또는 통계 유지보수 작업이 효과적인지 확인할 때.

주의

임계값 공식은 compat level 130+에 적용된다(MIN(500 + 20%, SQRT(1000 x rows))). 낮은 compat level은 20% + 500 규칙을 사용한다. 한 번도 갱신되지 않은 통계(빈 테이블)는 NULL을 반환한다. sample_pct가 낮은 편향 컬럼은 FULLSCAN 또는 PERSIST_SAMPLE_PERCENT가 필요할 수 있다. 읽기 전용 쿼리이며 안전함.

DBAtlas에서 열기 →

관련 항목