다음을 통해 공유


sys.dm_db_xtp_checkpoint_files(Transact-SQL)

파일 크기, 물리적 위치 및 트랜잭션 ID를 포함하여 검사점 파일에 대한 정보를 표시합니다.

참고

닫히지 않은 현재 검사점의 경우 새 파일에 대한 sys.dm_db_xtp_checkpoint_files의 상태 열은 UNDER CONSTRUCTION입니다.트랜잭션 로그가 마지막 검사점 이후에 512MB 만큼 커지거나 CHECKPOINT 명령(CHECKPOINT(Transact-SQL))을 실행하는 경우 검사점이 자동으로 닫힙니다.

메모리 액세스에 최적화된 파일 그룹은 내부적으로 Filestream 파일을 사용하여 메모리 내 테이블의 삽입된 행과 삭제된 행을 저장합니다. 두 가지 유형의 파일이 있으며, 그 중 하나인 데이터 파일에는 삽입된 행이 포함되고 다른 하나인 델타 파일에는 삭제된 행이 포함됩니다. 각 데이터 파일에는 128MB 크기가 미리 할당되지만 오래 실행되는 트랜잭션이 있거나 수동 병합으로 인해 생성된 대상 파일이 128MB보다 큰 경우 크기가 더 커질 수 있습니다.

자세한 내용은 메모리 액세스에 최적화된 개체의 저장소 만들기 및 관리을 참조하십시오.

적용 대상: SQL Server(SQL Server 2014 - 현재 버전)

열 이름

형식

설명

container_id

int

데이터 또는 델타 파일이 속한 컨테이너(sys.database_files에서 FILESTREAM 형식의 파일로 표현됨)의 ID입니다. sys.database_files(Transact-SQL)에서 file_id와 조인합니다.

container_guid

uniqueidentifier

데이터 또는 델타 파일이 속한 컨테이너의 GUID입니다.

checkpoint_file_id

GUID

데이터 또는 델타 파일의 ID입니다.

relative_file_path

nvarchar(256)

컨테이너 위치에 상대적인 데이터 또는 델타 파일의 경로입니다.

file_type

tinyint

데이터 파일의 경우 0이고,

델타 파일의 경우 1입니다.

상태 열이 6으로 설정된 경우 NULL입니다.

file_type_desc

nvarchar(60)

파일의 형식으로, DATA_FILE, DELTA_FILE 또는 상태 열이 6으로 설정된 경우 NULL입니다.

internal_storage_slot

int

내부 저장소 배열에 있는 파일의 인덱스입니다. 상태 열이 2 또는 3으로 설정된 경우 NULL입니다.

검사점 파일 쌍에 상태 1 -- UNDER CONSTRUCTION이 있으면 NULL입니다.

checkpoint_pair_file_id

uniqueidentifier

해당하는 데이터 또는 델타 파일입니다.

file_size_in_bytes

bigint

사용되는 파일의 크기입니다. 상태 열이 4, 5 또는 6으로 설정된 경우 NULL입니다.

file_size_used_in_bytes

bigint

사용되는 파일의 사용된 크기입니다. 상태 열이 4, 5 또는 6으로 설정된 경우 NULL입니다.

계속 채워지고 있는 검사점 파일 쌍의 경우 다음 검사점 이후 이 열이 업데이트됩니다.

inserted_row_count

bigint

데이터 파일의 행 수입니다.

deleted_row_count

bigint

델타 파일의 삭제된 행 수입니다.

drop_table_deleted_row_count

bigint

테이블 삭제의 영향을 받는 데이터 파일의 행 수입니다. 상태 열이 1인 경우 데이터 파일에 적용됩니다.

삭제된 테이블에서 삭제된 행 수를 표시합니다. 삭제된 테이블에서 행의 메모리 가비지 수집이 완료되고 검사점이 확인된 후 drop_table_deleted_row_count 통계가 컴파일됩니다. 테이블 삭제 통계가 이 열에 적용되기 전에 SQL Server를 다시 시작하는 경우 통계가 복구의 일부로 업데이트됩니다. 복구 프로세스는 삭제된 테이블에서 행을 로드하지 않습니다. 삭제된 테이블의 통계는 로드 단계에서 컴파일되고 복구가 완료되면 이 열에서 보고됩니다.

state

int

0 – PRECREATED

1 – UNDER_CONSTRUCTION

2 - ACTIVE

3 – MERGE TARGET

4 – MERGED SOURCE

5 – REQUIRED FOR BACKUP/HA

6 – IN TRANSITION TO TOMBSTONE

7 – TOMBSTONE

state_desc

nvarchar(60)

  • PRECREATED - 트랜잭션이 실행되는 동안 새 파일 할당에 따른 대기 시간을 최소화하거나 없애기 위해 CFP(검사점 파일 쌍)라고도 하는 데이터 및 델타 파일 쌍의 작은 집합이 미리 할당된 상태로 유지됩니다. 전체 크기는 128MB의 데이터 파일 크기와 8MB의 델타 파일 크기를 포함하지만 데이터를 포함하지 않습니다. CFP 수는 최소값이 8개인 논리 프로세서 또는 스케줄러의 수(코어당 1개, 최대값 없음)로 계산됩니다. 메모리 액세스에 최적화된 테이블이 있는 데이터베이스의 고정된 저장소 오버헤드입니다.

  • UNDER CONSTRUCTION – 마지막 검사점 이후 새로 삽입된 데이터 행과 삭제되었을 수 있는 데이터 행을 저장하는 CFP의 집합입니다.

  • ACTIVE - 이전의 닫힌 검사점에서 삽입된 행과 삭제된 행이 포함됩니다. 이러한 CFP에는 데이터베이스를 다시 시작할 때 트랜잭션 로그의 활성 부분을 적용하기 전에 필요한 모든 삽입된 행과 삭제된 행이 포함됩니다. 이러한 CFP의 크기는 병합 작업이 트랜잭션 작업과 동시에 이루어지는 경우 메모리 액세스에 최적화된 테이블에 대한 메모리 내 크기의 두 배 정도입니다.

  • MERGE TARGET – 병합 정책에 따라 식별된 CFP의 통합된 데이터 행이 CFP에 저장됩니다. 병합이 설치되면 MERGE TARGET이 ACTIVE 상태로 전환됩니다.

  • MERGED SOURCE – 병합 작업이 설치되면 원본 CFP가 MERGED SOURCE로 표시됩니다. 병합 정책 평가기가 여러 병합을 식별할 수 있지만 CFP는 하나의 병합 작업에만 참여할 수 있습니다.

  • REQUIRED FOR BACKUP/HA – 병합이 설치되고 MERGE TARGET CFP가 영구 검사점의 일부이면 병합 원본 CFP가 이 상태로 전환됩니다. 이 상태의 CFP는 메모리 액세스에 최적화된 테이블이 포함된 데이터베이스의 정확한 작업을 위해 필요합니다. 예를 들어 이전 시점으로 돌아가기 위해 영구 검사점에서 복구할 수 있습니다. 로그 잘림 지점이 트랜잭션 범위를 벗어나는 경우 가비지 수집에 대해 CFP를 표시할 수 있습니다.

  • IN TRANSITION TO TOMBSTONE – 이러한 CFP는 메모리 내 OLTP 엔진에 필요하지 않으며 가비지 수집될 수 있습니다. 이 상태는 이러한 CFP가 백그라운드 스레드에서 다음 상태인 TOMBSTONE으로 전환되기를 기다리고 있음을 나타냅니다.

  • TOMBSTONE – 이러한 CFP는 filestream 가비지 수집기에 의해 가비지 수집되기를 기다리고 있습니다. (sp_filestream_force_garbage_collection(Transact-SQL))

lower_bound_tsn

bigint

파일에 포함된 트랜잭션의 하한입니다. 상태 열이 1이 아닌 경우 Null입니다.

upper_bound_tsn

bigint

파일에 포함된 트랜잭션의 상한입니다. 상태 열이 1이 아닌 경우 Null입니다.

last_backup_page_count

int

마지막 백업에서 결정되는 논리 페이지 수입니다. 상태 열이 0, 1 또는 2로 설정된 경우 적용됩니다. 페이지 수를 알 수 없으면 NULL입니다.

delta_watermark_tsn

int

이 델타 파일에 쓴 마지막 검사점의 트랜잭션입니다. 델타 파일에 대한 워터마크입니다.

last_checkpoint_recovery_lsn

nvarchar(23)

여전히 파일이 필요한 마지막 검사점의 복구 로그 시퀀스 번호입니다.

tombstone_operation_lsn

nvarchar(23)

tombstone_operation_lsn이 로그 잘림 로그 시퀀스 번호보다 작으면 파일이 삭제됩니다.

logical_deletion_log_block_id

bigint

상태 열이 6이 아니면 Null입니다.

사용 권한

서버에 대한 VIEW DATABASE STATE 권한이 필요합니다.

사용 사례

다음과 같이 메모리 내 테이블에서 사용하는 저장소를 예측할 수 있습니다.

-- total storage used by in-memory tables
select sum (file_size_in_bytes)/(1024*1024) as file_size_in_MB
   from sys.dm_db_xtp_checkpoint_files 
   where internal_storage_slot is not NULL

다음 쿼리를 사용하여 각 파일의 여유 공간을 예측할 수 있습니다.

percent_full 열에 유의하십시오. 메모리 내 OLTP는 추론을 사용하여 데이터 파일에 대한 마지막 트랜잭션을 식별합니다. 트랜잭션에 의해 변경된 행 수에 따라 채워진 비율이 달라질 수 있습니다. 데이터 파일의 채워진 공간은 검사점이 수행되어 검사점 파일이 닫힌 경우에도 영향을 받을 수 있습니다. 행이 없는 데이터 파일을 확인할 수도 있습니다. 이러한 경우는 행을 삭제한 후 행을 추가하기 전에 수동 검사점을 수행하면 발생할 수 있습니다.

select *,
str((convert 
(float, (file_size_used_in_bytes * (1 - convert (float, deleted_rows)/inserted_rows)))/file_size_in_bytes),
25, 2) as percent_full
from
( 
  select t.internal_storage_slot, file_size_in_bytes, file_size_used_in_bytes, 
  (case when inserted_row_count= 0 then 1
         when inserted_row_count > 0 then inserted_row_count end) as inserted_rows,
(select deleted_row_count 
 from sys.dm_db_xtp_checkpoint_files 
 where internal_storage_slot = t.internal_storage_slot and file_type=1) as deleted_rows
from sys.dm_db_xtp_checkpoint_files as t
where internal_storage_slot is not NULL and file_type=0) as t_t
order by internal_storage_slot

SQL Server는 최대 8,192개의 데이터 및 델타 파일 쌍을 허용합니다. 활성 데이터 및 델타 파일 쌍의 수를 보려면 다음 쿼리를 사용합니다.

-- total number of data and delta file pairs
select count (*)
from sys.dm_db_xtp_checkpoint_files
where internal_storage_slot is not NULL and file_type = 0

사용된 총 저장소 %를 예측하려면:

declare @deleted_row_count int; 
declare @inserted_row_count int;
declare @effective_row_percentage float

-- get the total deleted row counts by looking at active delta files
select @deleted_row_count = SUM (deleted_row_count)
from sys.dm_db_xtp_checkpoint_files 
where state = 2 and file_type = 1

-- get total inserted row count by looking at active data files
select @inserted_row_count = SUM (inserted_row_count)
from sys.dm_db_xtp_checkpoint_files 
where state = 2 and file_type = 0

-- get the effective % of active rows after accounting for the deleted rows
-- This number represents the potential space that can be freed up if deleted are removed from storage
select @effective_row_percentage =  (1 - convert (float, @deleted_row_count)/@inserted_row_count)

-- Compute the effective usage fill factor for the storage. 
-- Effective fill factor computes the effective free space in data files
-- on average after accounting for the deleted rows 
-- This should be >= 50% otherwise it is an indication that auto-merge is not keeping up
select 
str (convert (varchar(100), ((SUM (file_size_used_in_bytes)*@effective_row_percentage)/SUM (file_size_in_bytes)) *100 ),5, 2)
as [storage usage fill factor]
from sys.dm_db_xtp_checkpoint_files
where state = 2 and file_type = 0

참고 항목

개념

메모리 액세스에 최적화된 테이블 동적 관리 뷰(Transact-SQL)