Share via


Gestire i dati cronologici con i criteri di conservazione

Importante

SQL Edge di Azure non supporta più la piattaforma ARM64.

Dopo aver definito i criteri di conservazione dei dati per un database e la tabella sottostante, viene eseguita un'attività timer in background per rimuovere tutti i record obsoleti dalla tabella abilitata per la conservazione dei dati. L'identificazione delle righe corrispondenti e la relativa rimozione dalla tabella vengono eseguite in modo trasparente, nell'attività in background pianificata ed eseguita dal sistema. La condizione di validità per le righe della tabella viene controllata in base alla filter_column colonna specificata nella definizione della tabella. Se il periodo di conservazione è impostato su una settimana, ad esempio, le righe di tabella idonee per la pulizia soddisfano una delle condizioni seguenti:

  • Se la colonna del filtro usa il tipo di dati DATETIMEOFF edizione Standard T, la condizione èfilter_column < DATEADD(WEEK, -1, SYSUTCDATETIME())
  • In caso contrario, la condizione è filter_column < DATEADD(WEEK, -1, SYSDATETIME())

Fasi di pulizia della conservazione dei dati

L'operazione di pulizia della conservazione dei dati è costituita da due fasi:

  1. Individuazione: in questa fase, l'operazione di pulizia identifica tutte le tabelle all'interno dei database utente per compilare un elenco per la pulizia. L'individuazione viene eseguita una volta al giorno.
  2. Pulizia: in questa fase, la pulizia viene eseguita su tutte le tabelle con conservazione dei dati limitata, identificata nella fase di individuazione. Se l'operazione di pulizia non può essere eseguita in una tabella, tale tabella viene ignorata nell'esecuzione corrente e verrà ritentata nell'iterazione successiva. Durante la pulizia vengono usati i principi seguenti:
    • Se una riga obsoleta è bloccata da un'altra transazione, tale riga viene ignorata.
    • La pulizia viene eseguita con un timeout di blocco predefinito di 5 secondi. Se i blocchi non possono essere acquisiti nelle tabelle all'interno della finestra di timeout, la tabella viene ignorata nell'esecuzione corrente e verrà ritentata nell'iterazione successiva.
    • Se si verifica un errore durante la pulizia di una tabella, tale tabella viene ignorata e verrà prelevata nell'iterazione successiva.

Pulizia manuale

A seconda delle impostazioni di conservazione dei dati in una tabella e della natura del carico di lavoro nel database, è possibile che il thread di pulizia automatica non rimuovono completamente tutte le righe obsolete durante l'esecuzione. Per consentire agli utenti di rimuovere manualmente le righe obsolete, la sys.sp_cleanup_data_retention stored procedure è stata introdotta in SQL Edge di Azure.

Questa stored procedure accetta tre parametri:

  • @schema_name: nome dello schema proprietario per la tabella. Obbligatorio.
  • @table_name: nome della tabella per cui viene eseguita la pulizia manuale. Obbligatorio.
  • @rowcount: variabile di output. Restituisce il numero di righe eliminate dalla pulizia manuale di sp. (Facoltativo).

Per altre informazioni, vedere sys.sp_cleanup_data_retention (Transact-SQL).

Nell'esempio seguente viene illustrata l'esecuzione della pulizia manuale di sp per la tabella dbo.data_retention_table.

DECLARE @rowcnt BIGINT;
EXEC sys.sp_cleanup_data_retention 'dbo', 'data_retention_table', @rowcnt OUTPUT;
SELECT @rowcnt;

Come vengono eliminate le righe obsolete

Il processo di pulizia dipende dal layout dell'indice della tabella. Viene creata un'attività in background per eseguire la pulizia dei dati obsoleta per tutte le tabelle con periodo di conservazione finito. Pulire la logica per l'indice rowstore (heap o albero B) elimina la riga obsoleti in blocchi più piccoli (fino a 10.000), riducendo al minimo la pressione sul log del database e sul sottosistema di I/O. Anche se la logica di pulizia usa l'indice dell'albero B richiesto, l'ordine delle eliminazioni per le righe precedenti al periodo di conservazione non può essere garantito con fermezza. In altre parole, non dipendere dall'ordine di pulizia nelle applicazioni.

Avviso

Nel caso di heap e indici ad albero B, la conservazione dei dati esegue una query di eliminazione sulle tabelle sottostanti, che può essere in conflitto con i trigger di eliminazione nelle tabelle. È consigliabile rimuovere i trigger di eliminazione dalle tabelle oppure evitare di usare la conservazione dei dati nelle tabelle con trigger DML eliminati.

L'attività di pulizia per gli indici columnstore cluster rimuove interi gruppi di righe contemporaneamente (in genere contengono 1 milione di righe ciascuna), che è efficiente, soprattutto quando i dati vengono generati e vengono superati con un ritmo elevato.

Diagram of data retention cleanup.

Un'eccellente compressione dei dati e una pulizia efficiente della conservazione rende gli indici columnstore cluster una scelta perfetta per gli scenari in cui il carico di lavoro genera rapidamente una grande quantità di dati.

Monitorare la pulizia della conservazione dei dati

Le operazioni di pulizia dei criteri di conservazione dei dati possono essere monitorate usando eventi estesi in SQL Edge di Azure. Per altre informazioni sugli eventi estesi, vedere Panoramica degli eventi estesi.

Gli eventi estesi seguenti consentono di tenere traccia dello stato delle operazioni di pulizia.

Nome Descrizione
data_retention_task_started Si verifica all'avvio dell'attività in background per la pulizia delle tabelle con un criterio di conservazione.
data_retention_task_completed Si verifica quando termina l'attività in background per la pulizia delle tabelle con un criterio di conservazione.
data_retention_task_exception Si verifica quando l'attività in background per la pulizia delle tabelle con un criterio di conservazione ha esito negativo, al di fuori del processo di pulizia della conservazione specifico per tali tabelle.
data_retention_cleanup_started Si verifica all'avvio del processo di pulizia di una tabella con i criteri di conservazione dei dati.
data_retention_cleanup_exception Si verifica quando il processo di pulizia di una tabella con criteri di conservazione ha esito negativo.
data_retention_cleanup_completed Si verifica quando termina il processo di pulizia di una tabella con criteri di conservazione dei dati.

Inoltre, è stato aggiunto un nuovo tipo di buffer circolare denominato RING_BUFFER_DATA_RETENTION_CLEANUP alla visualizzazione a sys.dm_os_ring_buffers gestione dinamica. Questa vista può essere usata per monitorare le operazioni di pulizia della conservazione dei dati.

Passaggi successivi