20 minutos es demasiado para ese volumen de registrosPonele indices a la temporal.
-------------------------------- Atte. Ing. Jose Mariano Alvarez SQL Total Consulting 2008/9/10 Ignacio Ayerbe <[EMAIL PROTECTED]> > El Sp es más complejo, está muy optimizado a nivel que no se usan cursores, > todas las tablas tienen índices, etc. Para mí el tema viene por otro lado, a > nosotros no nos importa mucho que tarde 20 minutos, sino que ¿Por qué desde > el Query Analyzer finaliza y desde una aplicación que lo único que hace es > ejecutar el SP, el servidor SQL se queda procesando indefinidamente? (ya > verificamos que el problema no es del programa porque el que se queda > procesando y nunca retorna de la ejecución es el SQL) > > > -----Mensaje original----- > De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Maxi Accotto > Enviado el: Miércoles, 10 de Septiembre de 2008 11:15 a.m. > Para: Ignacio Ayerbe > Asunto: [dbms] Consulta sobre Performance de SP > > Hola, 20 min? una locura de tiempo!! pensa porque usas la temporal? > que hace el proceso? necesita retornar luego datos al usuario? que > haces luego con esa temporal? > > El día 10 de septiembre de 2008 10:57, Ignacio Ayerbe > <[EMAIL PROTECTED]> escribió: > > Me acaban de decir algo realmente importante que no sabía, me dijeron que > > este SP ejecutado con el Query Analyzer tarda 20 minutos, pero con la > > aplicación .NET (utilizando ADO.NET) se queda indefinidamente. Entonces, > > como se está usando un String de Conexión a la Base de Datos normal, > ¿podría > > ser que el String necesite algún otro parámetro especial? > > > > > > > > > > > > De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Jose Mariano > > Alvarez > > Enviado el: Miércoles, 10 de Septiembre de 2008 10:42 a.m. > > > > Para: Ignacio Ayerbe > > Asunto: [dbms] Consulta sobre Performance de SP > > > > > > > > Solo te podria servir crear un indice clustered en la temporar por los > > campos adecuados para evitar los sort intermedios y algunos table scans. > > > > > > > > -------------------------------- > > > > Atte. > > Ing. Jose Mariano Alvarez > > SQL Total Consulting > > > > 2008/9/10 Ignacio Ayerbe <[EMAIL PROTECTED]> > > > > Quizás me exprese mal con el tema de recorrer. Te paso más o menos lo que > > hace: > > > > > > > > Creo una tabla temporal: > > > > > > > > create table #p1 (id_tipo_iden int, numero_iden nvarchar(11), > > id_situacion_aplicar int, id_situacion_cendeu int, id_situacion_entidad > int) > > > > > > > > > > > > Luego hago un INSERT INTO sencillo: > > > > > > > > insert into #p1 > > > > select a.id_tipo_iden, > > > > a.numero_iden, > > > > ... > > > > > > > > Y por ultimo ejecuto varios (28 en total) UPDATEs de este tipo: > > > > > > > > update #p1 > > > > set id_situacion_aplicar = 1 > > > > where id_situacion_entidad < id_situacion_cendeu > > > > and > > > > (id_situacion_cendeu = 21 or id_situacion_cendeu = 22) > > > > and > > > > id_situacion_entidad = 1 > > > > and > > > > @par83 = 0 > > > > and > > > > @par84 <> 0 > > > > > > > > > > > > Estos UPDATEs se aplican sobre la tabla temporal que posee 1.000.000 de > > registros. Esta es la parte que se queda procesando y nunca finaliza. > > > > > > > > Saludos > > > > > > > > > > > > De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Jose Mariano > > Alvarez > > Enviado el: Martes, 09 de Septiembre de 2008 07:03 p.m. > > Para: Ignacio Ayerbe > > Asunto: [dbms] Consulta sobre Performance de SP > > > > > > > > Que significa recorrer? > > > > > > > > Pasanos el script de la tabla y los indices de la tabla que tiene el > update. > > > > También el update. > > > > > > > > Imagino que es un solo update por lo que cuentas. Es asi? > > > > > > > > saludos > > > > -------------------------------- > > Atte. > > Ing. Jose Mariano Alvarez > > SQL Total Consulting > > > > On Tue, Sep 9, 2008 at 17:28, Ignacio Ayerbe > > <[EMAIL PROTECTED]> wrote: > > > > Buenos días Listeros. > > > > Tengo un problema con un Stored Procedure corriendo en un MSSQL > 2000, > > el tema es el siguiente: la base de datos pesa unos 12Gb y la tarea que > debe > > realizar el Stored Procedure es recorrer alrededor de 1.000.000 de > > registros, meterlos en una tabla temporal y hacerles un Update a cada > > registro (el update es sencillo, solo modifica un campo de la tabla > > temporal). > > El problema es que cuando ejecuto el proceso con 1.000 registros > > tarda 0 seg., con 100.000 registros tarda 10 minutos y cuando lo ejecuto > con > > el 1.000.000 de registros directamente se queda como procesando y nunca > > finaliza. > > ¿Alguien tiene una idea de cómo solucionar esto? ¿Hay que tocar > algo > > en el servidor? ¿Qué tips me recomiendan para ejecutar acciones simples > pero > > en gran volumen? > > > > Saludos y agradezco cualquier ayuda al respecto. > > > > > > > > > > > > -- > ----------------------------------------------------------- > Microsoft MVP en SQL Server > Consultor en SQLTotalConsulting > Excelencia en servicios y consultoria SQLServer > www.sqltotalconsulting.com > ----------------------------------------------------------- > > >
