sys.dm_db_xtp_checkpoint_files (Transact-SQL)
Visualizza informazioni sui file del checkpoint, incluse le dimensioni del file, la posizione fisica e l'ID transazione.
Nota
Per il checkpoint corrente che non è stato chiuso, la colonna di sys.dm_db_xtp_checkpoint_files contenente gli stati per i nuovi file sarà UNDER CONSTRUCTION.Un checkpoint viene chiuso automaticamente quando il log delle transazioni aumenta di 512 MB dall'ultimo checkpoint oppure se si esegue il comando CHECKPOINT (CHECKPOINT (Transact-SQL)).
Un filegroup con ottimizzazione per la memoria utilizza internamente i file FILESTREAM per archiviare le righe inserite ed eliminate per le tabelle in memoria. Sono disponibili due tipi di file. Un file di dati include le righe inserite mentre un file differenziale contiene le righe eliminate. Ogni file di dati ha una dimensione preassegnata di 128 MB, ma può essere ingrandita nel caso di una transazione con esecuzione prolungata o durante un'unione manuale che forza la restituzione di un file di destinazione più grande di 128 MB.
Per ulteriori informazioni, vedere Creazione e gestione dell'archiviazione per gli oggetti con ottimizzazione per la memoria.
Si applica a: SQL Server (da SQL Server 2014 alla versione corrente). |
Nome colonna |
Tipo |
Descrizione |
---|---|---|
container_id |
int |
ID del contenitore (rappresentato come file con tipo FILESTREAM in sys.database_files) di cui fa parte il file di dati o il file differenziale. Join con file_id in sys.database_files (Transact-SQL). |
container_guid |
uniqueidentifier |
GUID del contenitore di cui fa parte il file di dati o il file differenziale. |
checkpoint_file_id |
GUID |
ID del file di dati o differenziale. |
relative_file_path |
nvarchar(256) |
Percorso del file di dati o differenziale, relativo al percorso del contenitore. |
file_type |
tinyint |
0 per il file di dati. 1 per il file differenziale. NULL se la colonna contenente gli stati è impostata su 6. |
file_type_desc |
nvarchar(60) |
Tipo di file: DATA_FILE, DELTA_FILE o NULL se la colonna contenente gli stati è impostata su 6. |
internal_storage_slot |
int |
Indice del file nella matrice di archiviazione interna. NULL se la colonna contenente gli stati è impostata su 2 o 3. NULL se lo stato di una coppia di file del checkpoint è 1 -- UNDER CONSTRUCTION. |
checkpoint_pair_file_id |
uniqueidentifier |
File di dati o differenziale corrispondente. |
file_size_in_bytes |
bigint |
Dimensioni del file in uso. NULL se la colonna contenente gli stati è impostata su 4, 5 o 6. |
file_size_used_in_bytes |
bigint |
Dimensioni utilizzate del file in uso. NULL se la colonna contenente gli stati è impostata su 4, 5 o 6. Per le coppie di file del checkpoint ancora da popolare, questa colonna verrà aggiornata dopo il checkpoint successivo. |
inserted_row_count |
bigint |
Numero di righe del file di dati. |
deleted_row_count |
bigint |
Numero di righe eliminate del file differenziale. |
drop_table_deleted_row_count |
bigint |
Numero di righe nei file di dati interessati dall'eliminazione di una tabella. Si applica ai file di dati quando la colonna contenente gli stati è uguale a 1. Mostra i conteggi delle righe eliminate dalle tabelle eliminate. Le statistiche drop_table_deleted_row_count vengono compilate dopo il completamento del Garbage Collection in memoria delle righe delle tabelle eliminate e l'esecuzione di un checkpoint. Se si riavvia SQL Server prima che le statistiche delle tabelle eliminate vengono riflesse nella colonna, le statistiche verranno aggiornate durante il recupero. Il processo di recupero non carica le righe delle tabelle eliminate. Le statistiche delle tabelle eliminate vengono compilate durante la fase di caricamento e riportate nella colonna al termine del recupero. |
stato |
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 |
Limite inferiore delle transazioni incluse nel file. Null se la colonna contenente gli stati è diversa da 1. |
upper_bound_tsn |
bigint |
Limite superiore delle transazioni incluse nel file. Null se la colonna contenente gli stati è diversa da 1. |
last_backup_page_count |
int |
Conteggio delle pagine logiche determinato nell'ultimo backup. Si applica quando la colonna contenente gli stati è impostata su 0, 1 o 2. NULL se il conteggio delle pagine non è noto. |
delta_watermark_tsn |
int |
Transazione dell'ultimo checkpoint che ha scritto in questo file differenziale. Si tratta della filigrana per il file differenziale. |
last_checkpoint_recovery_lsn |
nvarchar(23) |
Numero di sequenza del file di log (LSN) di recupero dell'ultimo checkpoint per cui è ancora richiesto il file. |
tombstone_operation_lsn |
nvarchar(23) |
Il file verrà eliminato una volta che tombstone_operation_lsn non è più sincronizzato con l'LSN di troncamento del log. |
logical_deletion_log_block_id |
bigint |
Null, a meno che la colonna contenente gli stati non sia 6. |
Autorizzazioni
È richiesta l'autorizzazione VIEW DATABASE STATE per il server.
Modalità di utilizzo comuni
È possibile stimare lo spazio di archiviazione utilizzato dalle tabelle in memoria come indicato di seguito:
-- 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
È possibile stimare lo spazio disponibile in ogni file con la query seguente.
Si noti la colonna percent_full. OLTP in memoria utilizza un approccio euristico per individuare l'ultima transazione per il file di dati. A seconda del numero di righe modificate dalla transazione varia la percentuale di completamento. Lo spazio occupato di un file di dati può variare anche quando è stato eseguito un checkpoint che ha causato la chiusura del file. È inoltre possibile che un file di dati sia senza righe. Ciò può essere causato da un checkpoint manuale dopo l'eliminazione delle righe e prima dell'aggiunta di qualsiasi riga.
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 consente fino a 8.192 coppie di file di dati e file differenziali. Per vedere il numero delle coppie attive di file di dati e file differenziali, utilizzare la query seguente.
-- 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
Per stimare la percentuale di spazio di archiviazione totale utilizzato:
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
Vedere anche
Concetti
Viste a gestione dinamica correlate alle tabelle con ottimizzazione per la memoria (Transact-SQL)