Probaria de tirar este comando para chequear la DB.

 

EXEC sp_resetstatus 'dbname';

ALTER DATABASE dbname SET EMERGENCY

DBCC checkdb('dbname')

ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE DBCC CheckDB
('dbname', REPAIR_ALLOW_DATA_LOSS) ALTER DATABASE dbname SET MULTI_USER

 

Ojo que si hay transacciones telas rollbackea … antes asgurate de que nadie
este conectado.

 

 

Saludos!

 

De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Seba Frank
Enviado el: Jueves, 13 de Noviembre de 2008 11:30 a.m.
Para: [EMAIL PROTECTED]
Asunto: [dbms] Delete con esperas

 

Marcelo, tiene un solo índice y no tiene fragmentación. El where lo hace por
el índice.

La verdad sigo en investigación pero no se me ocurre que puede ser...

 

Si a alguno se le ocurre algo para ver serán bienvenidos los comentarios

 

Saludos

 

Seba

----- Original Message ----- 

From: Carlos <mailto:[EMAIL PROTECTED]>  Peix 

To: Seba Frank <mailto:[EMAIL PROTECTED]>  

Sent: Thursday, November 13, 2008 8:40 AM

Subject: [dbms] Delete con esperas

 

Hola Marcelo,

 

Lo del uso de recursos lo dije porque tiene que almacenar todos los cambios
de la transaccion, cuanto mas cantidad de operaciones de modificacion se
realicen, mas espacio se necesita, en principio, proporcinalmente. Lo que
puede estar pasando con la no proporcionalidad que menciona Sebastian
(100.000 -> un segundo, 500.000 varios minutos) puede deberse a sobrepasar
algun limite que habria que investigar.

 

Con que mencionas de la fragmentacion no tengo experiencia, pero se me
ocurre que puede sumar tiempo linealmente, no el salto que menciona
Sebastian.

 

Y paro aca porque ya estoy hablando mas de la medida cobre cosas que no se
(si, tengo hasta medida para hablar de cosas que no se :-) ).

 

Carlos Peix

 


  _____  


De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Marcelo Colombani
Enviado el: Miércoles, 12 de Noviembre de 2008 11:20 a.m.
Para: [EMAIL PROTECTED]
Asunto: [dbms] Delete con esperas

Puede ser que tengas la tabla muy fragmentada, y apesar de tener pocos
registros utiliza mucha memoria, como dice Carlos. O también que tengas
muchos indices definidos para esa tabla.

 

Puedes probar con DBCC INDEXDEFRAG sobre el índice cluster.

 

Otra: el where se relaciona con algún indice que tienes, porque me ha pasado
que dependiendo del índice demoraba mas, o menos la eliminación, por la
selectividad.

 

Saludos

Marcelo

----- Original Message ----- 

From: Carlos <mailto:[EMAIL PROTECTED]>  Peix 

To: Marcelo <mailto:[EMAIL PROTECTED]>  Colombani 

Sent: Wednesday, November 12, 2008 8:18 AM

Subject: [dbms] Delete con esperas

 

Hola Sebastian,

 

No puedo explicar la diferencia tan grande, seguramente estas alcanzando
algun limite duro. Algo parecido a: a medida que vas consumiendo mas
memoria, el rendimiendo va disminuyendo linealmente, pero cuando pasas a
paginar a disco, tenes un salto abismal.

 

No digo que sea eso, pero seguramente este pasando algo conceptualmente
similar.

 

Tenes que tener en cuenta quela base de datos tienen que tener toda la
informacion de la transaccion acumulada para confirmarla en el commit, el
espacio en que almacena esa informacion es la famosa tempdb. Cuando mas
grande es la transaccion, mas se fuerza este recurso.

 

Ya me sorprende que tarde nada mas que un segundo en borrar 100.000
registros (yo hubiese sugerido 20 o 30K). Ya que tenes que segmentar, yo me
quedaria con 100.000.

 

Carlos Peix

 


  _____  


De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Seba Frank
Enviado el: Miércoles, 12 de Noviembre de 2008 10:06 a.m.
Para: [EMAIL PROTECTED]
Asunto: [dbms] Delete con esperas

 

No no, es una tabla con 40 millones de registros, asique esa posibilidad no
cabe en este escenario.

Lo que hice fue borrarlos de a subconjuntos. Lo raro fue que al borrar
100.000 lo hacía en 1 segundo, pero con 500.000 se me moría, lo deje
corriendo 5 min y lo cancele. Algún comentario acerca de este
comportamiento.

 

Saludos

----- Original Message ----- 

From: Guevara <mailto:[EMAIL PROTECTED]>  Freddy 

To: [EMAIL PROTECTED] 

Sent: Tuesday, November 11, 2008 7:02 PM

Subject: RE: [dbms] Delete con esperas

 

 

Cuál es el numero de registros que quedarían en la estructura luego de
borrado los registros, adicional, es proceso batch?……, prueba realizando un
insert into a una tablatmp física del los que qudan por fuera del delete,
drop de la tabla antigua y sp_rename de la tmp con el nombre de la original
y no descuidar la respectiva creación de índices… 

 

 

Att

Fredy J. Guevara Carrillo


  _____  


De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Seba Frank
Enviado el: Martes, 11 de Noviembre de 2008 8:21
Para: Guevara Freddy
Asunto: [dbms] Delete con esperas

 

Buen día lista.

 

Tengo un problema con un delete. El mismo debería borrar cerca de 5 millones
de registros. El problema que tengo es que se me suspende, y el tipo de
espera es PAGEIOLATCH_EX. El tiempo de espera no pasa nunca los 500 lo que
me da una pauta de que se ejecuta y luego vuelve a suspenderse.

Mas datos, el where es sobre un indice cluster que tiene un solo campo, ej
indice id y el where id=x.

La fragmentación es casi nula porque acabo de reindexar.

 

Tienen alguna idea o comentario?

 

Muchas Gracias

 

Seba

Responder a