[SQL 2008] Delete TOP con Chunking Data.


Saludos amigos después de la recuperación satisfactoria del pequeño accidente que sufrí, he vuelto a escribir un articulo sobre una nueva opción de la clausula DELETE TOP disponible en SQL Server 2008.

En SQL Server 2008 la clausula TOP se puede utilizar para Insertar, Eliminar, o Actualizar datos, en pocas palabras se puede utilizar con las sentencias INSERT, DELETE Y UPDATE.

El ejemplo que les dejo muestra el uso de TOP para fragmentar “CHUNKING” información de una tabla, es decir, en lugar de ejecutar una sentencia DELETE para ejecutar una sola operación, podemos fragmentar los datos en pequeñas partes  y hacer que sea más ligera la operación, y así mejorar el rendimiento y concurrencia de la base de datos para tablas grandes que tengan un acceso frecuente.

Esta técnica se utiliza para el manejo de grandes cargas de datos para informes o aplicaciones de tipo data warehouse. Los Grandes o Simples conjuntos de actualizaciones, pueden hacer que se incremente considerablemente el archivo de Transacciones Transaction log”.  Al procesar en partes la información, cada una de es confirmada después de la terminación de su ejecución “COMMIT”, permitiendo que el servidor del SQL reutilice potencialmente ese espacio del registro de transacciones.

Además del incremento en el registro de transacciones, en una actualización muy grande de datos, si la consulta es cancelada, usted puede tener que esperar un gran lapso de tiempo mientras que la transacción se deshace “Rolls Back”. Con partes más pequeñas, usted puede continuar con su actualización de manera más rápida. También, el “Chunking” permite más concurrencia contra la tabla modificada, permitiendo que las consultas de usuario se ejecuten, en lugar de esperar varios minutos para que una modificación grande termine.

Para este ejemplo crearemos una tabla temporal en la cual insertaremos 5000 registros, posteriormente realizaremos un DELETE TOP para eliminar la información en lotes de 250 Filas, de esta manera eliminaremos la información en pequeñas partes generando operaciones ligeras y no una sola operación que elimine todos los registros en una sola ejecución.

 

1. Crearemos una tabla temporal para insertar los 5000 registros.

USE prueba;
GO

-- Creando la tabla Temporal.
DECLARE @tabla TABLE(id BIGINT, nombre VARCHAR(100));
DECLARE @j bigint = 1;

-- Insertanto los 5000 registros en la tabla temporal.
WHILE @j <= 5000
BEGIN

    INSERT INTO @tabla VALUES(@j,'Usuario' + CAST(@j AS varchar(4)));

SET @j = @j + 1;
END

 

2. Contamos los datos Insertados.

image

3. Recorremos los registros y los eliminamos en fragmentos de 250 registros.

-- Recorriendo los resgistros de la tabla.
WHILE (SELECT COUNT(*)FROM @tabla)> 0
BEGIN
    DELETE TOP(250) -- Eliminando en fragmentos de 250 registros
    FROM @tabla
END

El script completo quedaría de la siguiente manera:

USE prueba;
GO

SET NOCOUNT ON;

-- Creando la tabla Temporal.
DECLARE @tabla TABLE(id BIGINT, nombre VARCHAR(100));
DECLARE @j bigint = 1;

-- Insertanto los 5000 registros en la tabla temporal.
WHILE @j <= 5000
BEGIN

    INSERT INTO @tabla VALUES(@j,'Usuario' + CAST(@j AS varchar(4)));

SET @j = @j + 1;
END

--------------------------------------------------->>>
--------------------------------------------------->>>

-- Contando los registros antes de la eliminación.
SELECT COUNT(id) AS 'Antes de eliminar' FROM @tabla 

--------------------------------------------------->>>
--------------------------------------------------->>>

SET NOCOUNT OFF;

-- Recorriendo los resgistros de la tabla.
WHILE (SELECT COUNT(*)FROM @tabla)> 0
BEGIN
    DELETE TOP(250) -- Eliminando en fragmentos de 250 registros
    FROM @tabla
END

--------------------------------------------------->>>
--------------------------------------------------->>>

-- Contando los registros despues de la eliminación.
SELECT COUNT(id) AS 'Despues de eliminar' FROM @tabla  

--------------------------------------------------->>>
--------------------------------------------------->>>

 

Resultado:

image

image

image

Espero les sea de ayuda, dejen comentarios y por favor apóyenme votando por mi Blog.

 

votaPorMiBlogIvan Apóyame votando aquí: http://blogit.ms/TopBloggers.aspx en la categoría SQL Server. Los pasos para votar están aquí te llevara 3 min: Clic Aquí.

Etiquetas de Technorati: ,,,
  1. 12/08/09

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: