Depuración Optima

12/10/2005 - 17:22 por Pao | Informe spam
Este query que tan optimo es o que mejoras se pueden hacer para estos casos,
SQLserver 2000 con sp3.
Muchas gracias.

use sms_cliente
go

declare @w_fecha as datetime,@w_cuenta int
select @w_fecha = getdate()

select count(*) from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,@w_fecha)


set rowcount 10000
while (select count(*) from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,@w_fecha)) > 0
begin
insert into sms_res_enviadas_his
select * from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,@w_fecha)

delete sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,@w_fecha)
end

dump tran sms_cliente with no_log

Preguntas similare

Leer las respuestas

#1 Maxi
12/10/2005 - 17:32 | Informe spam
Hola, podrias hacerlo asi:

declare @err bigint

begin tran
insert into sms_res_enviadas_his
select * from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,getdate())
set @err = @@error
if @err <> 0
begin
rollback trans
end
delete sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,getdate())

set @err = @@error
if @err <> 0
begin
rollback trans
end

commit trans


Salu2
Maxi [MVP SQL SERVER]


"Pao" escribió en el mensaje
news:
Este query que tan optimo es o que mejoras se pueden hacer para estos
casos,
SQLserver 2000 con sp3.
Muchas gracias.

use sms_cliente
go

declare @w_fecha as datetime,@w_cuenta int
select @w_fecha = getdate()

select count(*) from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,@w_fecha)


set rowcount 10000
while (select count(*) from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,@w_fecha)) > 0
begin
insert into sms_res_enviadas_his
select * from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,@w_fecha)

delete sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,@w_fecha)
end

dump tran sms_cliente with no_log
Respuesta Responder a este mensaje
#2 Pao
12/10/2005 - 18:14 | Informe spam
y el vaciado del log???? es que son muchos datos como para que no se llene o
quede copado al final??

"Maxi" wrote:

Hola, podrias hacerlo asi:

declare @err bigint

begin tran
insert into sms_res_enviadas_his
select * from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,getdate())
set @err = @@error
if @err <> 0
begin
rollback trans
end
delete sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,getdate())

set @err = @@error
if @err <> 0
begin
rollback trans
end

commit trans


Salu2
Maxi [MVP SQL SERVER]


"Pao" escribió en el mensaje
news:
> Este query que tan optimo es o que mejoras se pueden hacer para estos
> casos,
> SQLserver 2000 con sp3.
> Muchas gracias.
>
> use sms_cliente
> go
>
> declare @w_fecha as datetime,@w_cuenta int
> select @w_fecha = getdate()
>
> select count(*) from sms_res_enviadas
> where re_fecha_ing < dateadd(m,-12,@w_fecha)
>
>
> set rowcount 10000
> while (select count(*) from sms_res_enviadas
> where re_fecha_ing < dateadd(m,-12,@w_fecha)) > 0
> begin
> insert into sms_res_enviadas_his
> select * from sms_res_enviadas
> where re_fecha_ing < dateadd(m,-12,@w_fecha)
>
> delete sms_res_enviadas
> where re_fecha_ing < dateadd(m,-12,@w_fecha)
> end
>
> dump tran sms_cliente with no_log



Respuesta Responder a este mensaje
#3 Maxi
12/10/2005 - 18:28 | Informe spam
A ver, el vaciado del transaction log dices? es un DTS lo que estas usando?
porque lo q se suele hacer con grandes volumenes de datos es esto

Poner un trigger para delete en la tabla intermedia donde haga un insert a
la tabla destino

Luego hacer Delete de a poco en la tabla intermedia


Salu2
Maxi [MVP SQL SERVER]


"Pao" escribió en el mensaje
news:
y el vaciado del log???? es que son muchos datos como para que no se llene
o
quede copado al final??

"Maxi" wrote:

Hola, podrias hacerlo asi:

declare @err bigint

begin tran
insert into sms_res_enviadas_his
select * from sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,getdate())
set @err = @@error
if @err <> 0
begin
rollback trans
end
delete sms_res_enviadas
where re_fecha_ing < dateadd(m,-12,getdate())

set @err = @@error
if @err <> 0
begin
rollback trans
end

commit trans


Salu2
Maxi [MVP SQL SERVER]


"Pao" escribió en el mensaje
news:
> Este query que tan optimo es o que mejoras se pueden hacer para estos
> casos,
> SQLserver 2000 con sp3.
> Muchas gracias.
>
> use sms_cliente
> go
>
> declare @w_fecha as datetime,@w_cuenta int
> select @w_fecha = getdate()
>
> select count(*) from sms_res_enviadas
> where re_fecha_ing < dateadd(m,-12,@w_fecha)
>
>
> set rowcount 10000
> while (select count(*) from sms_res_enviadas
> where re_fecha_ing < dateadd(m,-12,@w_fecha)) > 0
> begin
> insert into sms_res_enviadas_his
> select * from sms_res_enviadas
> where re_fecha_ing < dateadd(m,-12,@w_fecha)
>
> delete sms_res_enviadas
> where re_fecha_ing < dateadd(m,-12,@w_fecha)
> end
>
> dump tran sms_cliente with no_log



Respuesta Responder a este mensaje
#4 Pao
12/10/2005 - 19:07 | Informe spam
Si el vaciado del transaction log.
No es un dts es un simple query a ejecutarse, aunque se lo podría mejor
programar como una tarea, en ese caso lo pongo así como un query en el job?
la tabla tiene 600000 row.


"Maxi" wrote:

A ver, el vaciado del transaction log dices? es un DTS lo que estas usando?
porque lo q se suele hacer con grandes volumenes de datos es esto

Poner un trigger para delete en la tabla intermedia donde haga un insert a
la tabla destino

Luego hacer Delete de a poco en la tabla intermedia


Salu2
Maxi [MVP SQL SERVER]


"Pao" escribió en el mensaje
news:
>y el vaciado del log???? es que son muchos datos como para que no se llene
>o
> quede copado al final??
>
> "Maxi" wrote:
>
>> Hola, podrias hacerlo asi:
>>
>> declare @err bigint
>>
>> begin tran
>> insert into sms_res_enviadas_his
>> select * from sms_res_enviadas
>> where re_fecha_ing < dateadd(m,-12,getdate())
>> set @err = @@error
>> if @err <> 0
>> begin
>> rollback trans
>> end
>> delete sms_res_enviadas
>> where re_fecha_ing < dateadd(m,-12,getdate())
>>
>> set @err = @@error
>> if @err <> 0
>> begin
>> rollback trans
>> end
>>
>> commit trans
>>
>>
>> Salu2
>> Maxi [MVP SQL SERVER]
>>
>>
>> "Pao" escribió en el mensaje
>> news:
>> > Este query que tan optimo es o que mejoras se pueden hacer para estos
>> > casos,
>> > SQLserver 2000 con sp3.
>> > Muchas gracias.
>> >
>> > use sms_cliente
>> > go
>> >
>> > declare @w_fecha as datetime,@w_cuenta int
>> > select @w_fecha = getdate()
>> >
>> > select count(*) from sms_res_enviadas
>> > where re_fecha_ing < dateadd(m,-12,@w_fecha)
>> >
>> >
>> > set rowcount 10000
>> > while (select count(*) from sms_res_enviadas
>> > where re_fecha_ing < dateadd(m,-12,@w_fecha)) > 0
>> > begin
>> > insert into sms_res_enviadas_his
>> > select * from sms_res_enviadas
>> > where re_fecha_ing < dateadd(m,-12,@w_fecha)
>> >
>> > delete sms_res_enviadas
>> > where re_fecha_ing < dateadd(m,-12,@w_fecha)
>> > end
>> >
>> > dump tran sms_cliente with no_log
>>
>>
>>



Respuesta Responder a este mensaje
#5 Maxi
12/10/2005 - 19:16 | Informe spam
ok, entonces hace como te dije. Pone un trigger a la tabla de 600.000 Row
para delete y hace un insert hacia la otra tabla

Luego hace un While con Rowcount o tambien lo podes hacer desde afura, donde
borre de a N registros.

En la web
http://www.microsoft.com/spanish/ms...agosto.asp
podes descargar el material de la charla que di junto a M Alvarez y hay
ejemplos de esto.

Un beso


Salu2
Maxi [MVP SQL SERVER]


"Pao" escribió en el mensaje
news:
Si el vaciado del transaction log.
No es un dts es un simple query a ejecutarse, aunque se lo podría mejor
programar como una tarea, en ese caso lo pongo así como un query en el
job?
la tabla tiene 600000 row.


"Maxi" wrote:

A ver, el vaciado del transaction log dices? es un DTS lo que estas
usando?
porque lo q se suele hacer con grandes volumenes de datos es esto

Poner un trigger para delete en la tabla intermedia donde haga un insert
a
la tabla destino

Luego hacer Delete de a poco en la tabla intermedia


Salu2
Maxi [MVP SQL SERVER]


"Pao" escribió en el mensaje
news:
>y el vaciado del log???? es que son muchos datos como para que no se
>llene
>o
> quede copado al final??
>
> "Maxi" wrote:
>
>> Hola, podrias hacerlo asi:
>>
>> declare @err bigint
>>
>> begin tran
>> insert into sms_res_enviadas_his
>> select * from sms_res_enviadas
>> where re_fecha_ing < dateadd(m,-12,getdate())
>> set @err = @@error
>> if @err <> 0
>> begin
>> rollback trans
>> end
>> delete sms_res_enviadas
>> where re_fecha_ing < dateadd(m,-12,getdate())
>>
>> set @err = @@error
>> if @err <> 0
>> begin
>> rollback trans
>> end
>>
>> commit trans
>>
>>
>> Salu2
>> Maxi [MVP SQL SERVER]
>>
>>
>> "Pao" escribió en el mensaje
>> news:
>> > Este query que tan optimo es o que mejoras se pueden hacer para
>> > estos
>> > casos,
>> > SQLserver 2000 con sp3.
>> > Muchas gracias.
>> >
>> > use sms_cliente
>> > go
>> >
>> > declare @w_fecha as datetime,@w_cuenta int
>> > select @w_fecha = getdate()
>> >
>> > select count(*) from sms_res_enviadas
>> > where re_fecha_ing < dateadd(m,-12,@w_fecha)
>> >
>> >
>> > set rowcount 10000
>> > while (select count(*) from sms_res_enviadas
>> > where re_fecha_ing < dateadd(m,-12,@w_fecha)) > 0
>> > begin
>> > insert into sms_res_enviadas_his
>> > select * from sms_res_enviadas
>> > where re_fecha_ing < dateadd(m,-12,@w_fecha)
>> >
>> > delete sms_res_enviadas
>> > where re_fecha_ing < dateadd(m,-12,@w_fecha)
>> > end
>> >
>> > dump tran sms_cliente with no_log
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida