次の方法で共有


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)

  • PRECREATED – データ ファイルとデルタ ファイルのペアから成る小さなセットを、チェックポイント ファイル ペア (CFP) とも呼びますが、新しいファイルを実行対象のトランザクションとして割り当てるための待機時間を最小限に抑えるか排除する目的で、この CFP をあらかじめ割り当てられた状態のままにします。 これらは最大サイズで作成され、データ ファイルのサイズは 128 MB、デルタ ファイルのサイズは 8 MB になりますが、データは含まれません。 CFP の数は、8 を最小として、論理プロセッサまたはスケジューラの数に応じて計算されます (コアにつき 1 個で、最大値なし)。 これは、メモリ最適化テーブルのあるデータベースにおける固定のストレージ オーバーヘッドです。

  • UNDER CONSTRUCTION – 最新のチェックポイントより後に新しく挿入された行、場合によっては削除された行の数を格納する CFP のセット。

  • ACTIVE - この中には、閉じられた前のチェックポイント以降に挿入された行と削除された行が含まれます。 これらの CFP には、データベースの再起動時に、トランザクション ログのアクティブな部分を適用する前に必要とされる、必須である挿入された行と削除された行すべてが含まれます。 マージ操作がトランザクション ワークロードにとって最新であることを想定すると、これらの CFP のサイズは、メモリ最適化されたテーブルのインメモリ サイズの約 2 倍です。

  • MERGE TARGET – CFP は、マージ ポリシーによって識別された CFP から統合したデータ行を格納します。 マージをインストールした段階で、MERGE TARGET は ACTIVE 状態に遷移します。

  • MERGED SOURCE – マージ操作をインストールした段階で、マージ元 CFP はMERGED SOURCE としてマークされます。 マージ ポリシー エバリュエーターは複数のマージを識別できますが、各 CFP はただ 1 つのマージ操作のみに参加できます。

  • REQUIRED FOR BACKUP/HA – マージをインストールした段階で、MERGE TARGET CFP が持続性チェックポイントの一部である場合は、マージ元 CFP がこの状態に遷移します。 この状態にある CFP は、メモリ最適化されたテーブルを持つデータベースを正しく運用するうえで必要とされます。 たとえば、持続性チェックポイントから復元を行う際に、時間をさかのぼる目的で使用されます。 ログの切り捨てポイントが CFP のトランザクション範囲を超えた位置に移動すれば、その CFP をガベージ コレクションの対象としてマークできます。

  • IN TRANSITION TO TOMBSTONE – インメモリ OLTP エンジンはこれらの CFP を必要としないため、ガベージ コレクションの対象にすることができます。 この状態は、これらの CFP がバックグラウンド スレッドによって次の状態である TOMBSTONE に遷移されるのを待機していることを示します。

  • TOMBSTONE – これらの CFP は、FILESTREAM ガベージ コレクターによるガベージ コレクションを待機しています。 (sp_filestream_force_garbage_collection (Transact-SQL))

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

関連項目

概念

メモリ最適化テーブルの動的管理ビュー (Transact-SQL)