파일 크기, 물리적 위치 및 트랜잭션 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) |
|
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