sys.dm_db_xtp_checkpoint_files (Transact-SQL)
ファイル サイズ、物理的な場所、トランザクション ID など、チェックポイント ファイルに関する情報を表示します。
注意
閉じられていない現在のチェックポイントでは、新しいファイルの場合、sys.dm_db_xtp_checkpoint_files の state 列は UNDER CONSTRUCTION になります。チェックポイントは、前回のチェックポイント以降にトランザクション ログが 512 MB になった場合、または CHECKPOINT コマンド (CHECKPOINT (Transact-SQL)) を発行した場合に自動的に閉じられます。
メモリ最適化ファイル グループでは、ファイルストリーム ファイルを内部的に使用して、インメモリ テーブルに対して挿入および削除された行を格納します。 これらのファイルには 2 つの種類があります。 挿入された行が含まれるデータ ファイルと、削除された行が含まれるデルタ ファイルです。 各データ ファイルには 128 MB のサイズが事前に割り当てられています。ただし、実行時間の長いトランザクションがある場合や、手動マージによって結果の対象ファイルが 128 MB よりも大きくなる場合は、事前割り当てのサイズよりも大きくすることができます。
詳細については、「メモリ最適化オブジェクト用ストレージの作成と管理」を参照してください。
適用対象: 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 はデルタ ファイルに対応。 state 列が 6 に設定されている場合は NULL。 |
file_type_desc |
nvarchar(60) |
ファイルの種類: state 列が 6.に設定されている場合は、DATA_FILE、DELTA_FILE、または NULL。 |
internal_storage_slot |
int |
内部ストレージ配列でのファイルのインデックス。 state 列が 2 または 3 に設定されている場合は NULL。 チェックポイント ファイル ペアの state が 1 - UNDER CONSTRUCTION の場合は NULL です。 |
checkpoint_pair_file_id |
uniqueidentifier |
対応するデータ ファイルまたはデルタ ファイル。 |
file_size_in_bytes |
bigint |
使用されているファイルのサイズ。 state 列が 4、5、または 6 に設定されている場合は NULL。 |
file_size_used_in_bytes |
bigint |
使用されているファイルによる使用済みサイズ。 state 列が 4、5、または 6 に設定されている場合は NULL。 データ格納中のチェックポイント ファイル ペアについては、この列は、次のチェックポイントの後に更新されます。 |
inserted_row_count |
bigint |
データ ファイル内の行の数。 |
deleted_row_count |
bigint |
デルタ ファイル内の削除された行の数。 |
drop_table_deleted_row_count |
bigint |
drop table の影響を受けたデータ ファイル内の行数。 state 列が 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 |
ファイルに含まれているトランザクションの下限。 state 列が 1.以外の場合は NULL です。 |
upper_bound_tsn |
bigint |
ファイルに含まれているトランザクションの上限。 state 列が 1.以外の場合は NULL です。 |
last_backup_page_count |
int |
最後のバックアップによって決定された論理ページ数。 state 列が 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 |
state 列が 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