Borrado incremental en Sql Server con T-SQL

EL proyecto en el cual trabajo ha requerido manejar el borrado programado de grandes cantidades de registros en una tabla por lo que indagué acerca de la mejor forma de realizar este borrado impactando lo menos posible al servidor.

El buen amigo y especialista en Sql Server, Carlos Cemborain, me comentó acerca de aplicar borrados incrementales.

En un caso tradicional, por ejemplo, para borrar 3.000.000 de registros de una tabla aplicariamos algo como:

DELETE from LaTabla
-- Las condiciones de eliminación
WHERE campo1=X

Sin embargo, con un borrado incremental lo pudiesemos manejar de la siguiente forma:

declare @CONTINUE int
declare @ROWCOUNT int
set @continue = 1

while @continue = 1
begin
  delete top (10000) from LaTabla where campo1 = X
  set @ROWCOUNT = @@ROWCOUNT

  if @ROWCOUNT = 0
  begin
    set @continue = 0
  end
end

De esta forma podemos evitar darle golpes fuertes al servidor al momento de querer borrar registros. En este caso usamos un top 10000 partiendo de un peso máximo por registro (y cantidad de columnas) de 8k, de esta forma tendríamos un impacto por iteración de 80.000k… ya que en la mayoría de los casos el cuello de botella en un servidor de base de datos es la escritura en disco.

Nos leemos,

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