Поделиться через


sys.dm_db_xtp_checkpoint_files (Transact-SQL)

Отображает сведения о файлах контрольных точек, включая размер файла, физическое местоположение и идентификатор транзакции.

Примечание

Для текущей незакрытой контрольной точки state sys.dm_db_xtp_checkpoint_files будет находиться в состоянии UNDER CONSTRUCTION для новых файлов.Контрольная точка закрывается автоматически в случае, если журнал транзакций увеличивается до 512 МБ с момента создания последней контрольной точки, или при использовании команды CHECKPOINT (CHECKPOINT (Transact-SQL)).

Оптимизированная для памяти файловая группа использует файлы FILESTREAM для хранения вставленных и удаленных строк таблиц, находящихся в памяти. Существует два типа файлов. Файл данных содержит вставленные строки, а разностный файл содержит удаленные строки. Для каждого файла данных предварительно задается размер 128 МБ, но он может стать больше, если транзакция выполняется очень долго либо когда производится слияние вручную и итоговый размер файла становится больше 128 МБ.

Дополнительные сведения см. в разделе Создание и управление хранилищем для оптимизированных для памяти объектов.

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2014 до текущей версии).

Имя столбца

Тип

Описание

container_id

int

Идентификатор контейнера (представленного в виде файла с типом FILESTREAM в таблице sys.database_files), частью которого является файл данных или разностный файл. Соединения с file_id в sys.database_files (Transact-SQL).

container_guid

uniqueidentifier

Идентификатор GUID контейнера, частью которого является файл данных или разностный файл.

checkpoint_file_id

GUID

Идентификатор файла данных или разностного файла.

relative_file_path

nvarchar(256)

Путь к файлу данных или разностному файлу относительно расположения контейнера.

file_type

tinyint

0 для файла данных.

1 для разностного файла.

Значение NULL, если столбцу состояния задано значение 6.

file_type_desc

nvarchar(60)

Тип файла: DATA_FILE, DELTA_FILE или значение NULL, если столбцу состояния задано значение 6.

internal_storage_slot

int

Индекс файла в массиве внутреннего хранилища. Значение NULL, если столбцу состояния задано значение 2 или 3.

NULL, если пара файлов контрольных точек находится в состоянии 1 — UNDER CONSTRUCTION.

checkpoint_pair_file_id

uniqueidentifier

Соответствующий файл данных или разностный файл.

file_size_in_bytes

bigint

Используемый размер файла. Значение NULL, если столбцу состояния задано значение 4, 5 или 6.

file_size_used_in_bytes

bigint

Используемый размер файла задействованного файла. Значение NULL, если столбцу состояния задано значение 4, 5 или 6.

Для пар файлов контрольных точек, заполнение которых все еще выполняется, этот столбец будет обновляться после каждой следующей контрольной точки.

inserted_row_count

bigint

Число строк в файле данных.

deleted_row_count

bigint

Число удаленных строк в разностном файле.

drop_table_deleted_row_count

bigint

Количество строк в файле данных, затронутых операцией удаления таблицы. Относится к файлам данных, когда столбец состояния имеет значение 1.

Показывает количество строк, которые удалены из удаленных таблиц. Статистика drop_table_deleted_row_count компилируется после завершения сборки мусора строк удаленных таблиц из памяти и достижения контрольной точки. Если перезапустить SQL Server до того, как статистика удаленных таблиц появится в этом столбце, статистика будет обновлена в рамках восстановления. В процессе восстановления строки из удаленных таблиц не загружаются. Статистика по удаленным таблицам компилируется на стадии загрузки и отображается в этом столбце по завершении восстановления.

состояние

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), выделяются заранее, чтобы свести к минимуму или вообще устранить ожидание на выделение новых файлов при выполнении транзакций. Это полноценные файлы данных размером 128 МБ и разностные файлы размером 8 МБ, но без данных. Число пар файлов соответствует числу логических процессоров или планировщиков (по одному на ядро, без максимального значения), но не менее 8. Это фиксированное пространство хранения в базах данных с таблицами, оптимизированными для памяти.

  • UNDER CONSTRUCTION — набор пар CFP, в которых записываются вновь вставленные и, возможно, удаленные строки данных с момента последней контрольной точки.

  • ACTIVE — файлы в этом состоянии содержат вставленные и удаленные строки из ближайших предыдущих закрытых контрольных точек. Эти пары файлов содержат все обаятельные вставленные и удаленные строки, которые необходимы, прежде чем будет применена активная часть журнала транзакций после перезапуска базы данных. Размер этих CFP будет приблизительно в два раза больше размера оптимизированных для памяти таблиц в памяти при условии, что операция объединения выполняется в настоящий момент с транзакционной рабочей нагрузкой.

  • MERGE TARGET — этот CFP хранит консолидированные строки данных из CFP, которые были определены политикой слияния. После установки слияния MERGE TARGET переходит в состояние ACTIVE.

  • MERGED SOURCE — после установки операции слияния исходные CFP помечаются как MERGED SOURCE. Обратите внимание, что средство оценки политики слияния может определять несколько слияний, а CFP может участвовать только в одной операции слияния.

  • REQUIRED FOR BACKUP/HA — после установки слияния, когда CFP в состоянии MERGE TARGET является частью устойчивой контрольной точки, исходные CFP слияния переходят в это состояние. Находящиеся в этом состоянии CFP необходимы для правильности работы базы данных с оптимизированной для памяти таблицы. Например, чтобы выполнить восстановление от устойчивой контрольной точки, чтобы вернуться назад во времени. Пару файлов можно отметить для сборки мусора после того, как точка усечения журнала выходит из диапазона транзакций.

  • IN TRANSITION TO TOMBSTONE — эти CFP не нужны ядру In-Memory OLTP, поэтому они могут подпадать под сбор мусора. Это состояние указывает, что эти CFP ожидают, чтобы фоновый поток перевел их в следующее состояние, которым является состояние TOMBSTONE.

  • TOMBSTONE — эти CFP ожидают, когда их заберет сборщик мусора FILESTREAM. (sp_filestream_force_garbage_collection (Transact-SQL))

lower_bound_tsn

bigint

Нижняя граница транзакций, содержащихся в файле. Значение NULL, если столбец состояния имеет значение, отличное от 1.

upper_bound_tsn

bigint

Верхняя граница транзакций, содержащихся в файле. Значение NULL, если столбец состояния имеет значение, отличное от 1.

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

Значение NULL, если только столбец состояния не имеет значение 6.

Разрешения

Требуется разрешение 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. In-Memory 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)