Administración de datos históricos con directivas de retención

Importante

Azure SQL Edge ya no admite la plataforma ARM64.

Una vez definida la directiva de retención de datos para una base de datos y la tabla subyacente, se ejecuta una tarea del temporizador en segundo plano para quitar los registros obsoletos de la tabla habilitada para la retención de datos. La identificación de las filas coincidentes y su eliminación de la tabla se produce de forma transparente, en la tarea en segundo plano programada y ejecutada por el sistema. La condición de antigüedad de las filas de tabla se comprueba en función de la filter_column columna especificada en la definición de tabla. Si el período de retención se establece en una semana, por ejemplo, las filas de tabla aptas para la limpieza cumplen cualquiera de las condiciones siguientes:

  • Si la columna de filtro usa el tipo de datos DATETIMEOFFSET, la condición es filter_column < DATEADD(WEEK, -1, SYSUTCDATETIME())
  • De lo contrario, la condición es filter_column < DATEADD(WEEK, -1, SYSDATETIME())

Fases de la limpieza de la retención de datos

La operación de limpieza de retención de datos consta de dos fases:

  1. Detección: en esta fase, la operación de limpieza identifica todas las tablas de las bases de datos de usuario para crear una lista para la limpieza. La detección se ejecuta una vez al día.
  2. Limpieza: en esta fase, la limpieza se ejecuta en todas las tablas con retención de datos finita, identificada en la fase de detección. Si la operación de limpieza no se puede realizar en una tabla, esa tabla se omite en la ejecución actual y se reintentará en la siguiente iteración. Los siguientes principios se usan durante la limpieza:
    • Si una fila obsoleta está bloqueada por otra transacción, se omite.
    • La limpieza se ejecuta con un tiempo de espera de bloqueo predeterminado de 5 segundos. Si los bloqueos no se pueden adquirir en las tablas dentro de la ventana de tiempo de espera, la tabla se omite en la ejecución actual y se reintentará en la siguiente iteración.
    • Si se produce un error durante la limpieza de una tabla, esa tabla se omite y se recogerá en la siguiente iteración.

Limpieza manual

En función de la configuración de retención de datos de una tabla y según la naturaleza de la carga de trabajo en la base de datos, es posible que el subproceso de limpieza automática no quite completamente todas las filas obsoletas durante su ejecución. Para permitir que los usuarios quiten manualmente filas obsoletas, el sys.sp_cleanup_data_retention procedimiento almacenado se ha introducido en Azure SQL Edge.

Este procedimiento almacenado toma tres parámetros:

  • @schema_name: nombre del esquema propietario de la tabla. Necesario.
  • @table_name: nombre de la tabla para la que se ejecuta la limpieza manual. Necesario.
  • @rowcount: variable de salida. Devuelve el número de filas limpiadas por el procedimiento almacenado de limpieza manual. Opcional.

Para obtener más información, consulte sys.sp_cleanup_data_retention (Transact-SQL).

En el ejemplo siguiente se muestra la ejecución del procedimiento almacenado de limpieza manual para la tabla dbo.data_retention_table.

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

Eliminación de las filas obsoletas

El proceso de limpieza depende del diseño del índice de la tabla. Se crea una tarea en segundo plano para realizar la limpieza de datos obsoletos en todas las tablas con un período de retención finito. La lógica de limpieza del índice de almacén de filas (montón o árbol B) elimina filas antiguas en fragmentos más pequeños (hasta 10 000), lo que minimiza la presión en el registro de base de datos y el subsistema de E/S. Aunque la lógica de limpieza utiliza el índice de árbol B necesario, no se puede garantizar firmemente el orden de eliminaciones de las filas anteriores al período de retención. En otras palabras, no tome una dependencia del orden de limpieza en las aplicaciones.

Advertencia

En el caso de montones e índices de árbol B, la retención de datos ejecuta una consulta de eliminación en las tablas subyacentes, lo que puede entrar en conflicto con desencadenadores de eliminación en las tablas. Debe quitar los desencadenadores de eliminación de las tablas o evitar el uso de la retención de datos en tablas que tienen desencadenadores DML de eliminación.

La tarea de limpieza de los índices de almacén de columnas agrupados quita todos los grupos de filas a la vez (normalmente contienen 1 millón de filas cada una), lo que es eficaz, especialmente cuando los datos se generan y se agota a un ritmo alto.

Diagram of data retention cleanup.

Una excelente compresión de datos y una limpieza de retención eficaz hace que los índices de almacén de columnas agrupados sean una opción perfecta para escenarios en los que la carga de trabajo genera rápidamente una gran cantidad de datos.

Supervisión de la limpieza de retención de datos

Las operaciones de limpieza de directivas de retención de datos se pueden supervisar mediante eventos extendidos en Azure SQL Edge. Para obtener más información sobre los eventos extendidos, vea Información general sobre eventos extendidos.

Los siguientes eventos extendidos ayudan a realizar un seguimiento del estado de las operaciones de limpieza.

Nombre Descripción
data_retention_task_started Se produce cuando se inicia la tarea en segundo plano para la limpieza de tablas con una directiva de retención.
data_retention_task_completed Se produce cuando finaliza la tarea en segundo plano para la limpieza de tablas con una directiva de retención.
data_retention_task_exception Se produce cuando se produce un error en la tarea en segundo plano para la limpieza de tablas con una directiva de retención, fuera del proceso de limpieza de retención específico de esas tablas.
data_retention_cleanup_started Se produce cuando se inicia el proceso de limpieza de una tabla con la directiva de retención de datos.
data_retention_cleanup_exception Se produce cuando se produce un error en el proceso de limpieza de una tabla con directiva de retención.
data_retention_cleanup_completed Se produce cuando finaliza el proceso de limpieza de una tabla con la directiva de retención de datos.

Además, se ha agregado un nuevo tipo de búfer de anillo denominado RING_BUFFER_DATA_RETENTION_CLEANUP a la sys.dm_os_ring_buffers vista de administración dinámica. Esta vista se puede usar para supervisar las operaciones de limpieza de la retención de datos.

Pasos siguientes