Gestire i dati storici con i criteri di conservazione
Importante
SQL Edge di Azure verrà ritirato il 30 settembre 2025. Per altre informazioni e per le opzioni di migrazione, vedere l'annuncio di ritiro.
Nota
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 di righe corrispondenti e la loro rimozione dalla tabella si verificano 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 colonna filter_column
specificata nella definizione della tabella. Per esempio, se il periodo di conservazione è impostato su una settimana, le righe di tabella idonee per la pulizia soddisfano una delle condizioni seguenti:
- Se la colonna del filtro usa il tipo di dati DATETIMEOFFSET, la condizione è
filter_column < DATEADD(WEEK, -1, SYSUTCDATETIME())
- In caso contrario, la condizione è
filter_column < DATEADD(WEEK, -1, SYSDATETIME())
Fasi della pulizia della conservazione dei dati
L'operazione di pulizia della conservazione dei dati è costituita da due fasi:
- Individuazione: in questa fase, l'operazione di pulizia identifica tutte le tabelle all'interno dei database degli utenti per compilare un elenco per la pulizia. L'individuazione viene eseguita una volta al giorno.
- Pulizia: in questa fase, la pulizia viene eseguita su tutte le tabelle con conservazione dei dati limitata, identificate 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 seguenti principi:
- Se una riga obsoleta è bloccata da un'altra transazione, tale riga viene ignorata.
- La pulizia viene eseguita con un timeout 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 poi ripresa 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 automatico non rimuova completamente tutte le righe obsolete durante l'esecuzione. Per consentire agli utenti di rimuovere manualmente le righe obsolete, in SQL Edge di Azure è stata introdotta la stored procedure sys.sp_cleanup_data_retention
.
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 obsoleti per tutte le tabelle con periodo di conservazione finito. La logica di pulizia per l'indice rowstore (heap o albero B) elimina la riga obsoleta in blocchi più piccoli (fino a 10.000), riducendo al minimo la pressione sul log del database e sul sottosistema I/O. Anche se la logica di pulizia usa l'indice albero B richiesto, l'ordine di eliminazione delle righe con durata superiore al periodo di conservazione non può essere garantito con certezza. In altre parole, è consigliabile non dipendere dall'ordine di pulizia nelle applicazioni.
Avviso
Nel caso di indici heap e 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 (ognuno in genere costituito da un milione di righe) in una sola operazione. Questo approccio è efficiente, soprattutto quando vengono generati dati che diventano obsoleti a velocità elevate.
Un'ottima compressione dei dati e una pulizia efficiente dei dati conservati fanno degli indici columnstore cluster la soluzione ottimale per gli scenari in cui il carico di lavoro genera una grossa 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 sugli eventi estesi.
I seguenti eventi estesi consentono di monitorare lo stato delle operazioni di pulizia.
Nome | Descrizione |
---|---|
data_retention_task_started | Si verifica quando inizia l'attività in background per la pulizia delle tabelle con criteri di conservazione. |
data_retention_task_completed | Si verifica quando termina l'attività in background per la pulizia delle tabelle con criteri di conservazione. |
data_retention_task_exception | Si verifica quando l'attività in background per la pulizia delle tabelle con criteri di conservazione fallisce all'esterno del processo di pulizia di conservazione specifico della tabella. |
data_retention_cleanup_started | Si verifica quando inizia il processo di pulizia di una tabella con 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, un nuovo tipo di buffer circolare denominato RING_BUFFER_DATA_RETENTION_CLEANUP
è stato aggiunto alla visualizzazione a gestione dinamica sys.dm_os_ring_buffers
. Questa visualizzazione può essere usata per monitorare le operazioni di pulizia della conservazione dei dati.