Actualizacion artículos: 100.000 líneas y rendimiento

23/11/2007 - 09:14 por Gonzalo Rodríguez Carrera | Informe spam
Hola grupo.

Tengo un problemilla (otro más) :P .

Tengo que realizar un programa de actualización.
Durante el proceso se ralizan una serie de operaciones (bastante
complicadas, no podría hacerlas en el lado del servidor de datos) para
actualizar unos 100.000 artículos. Mi problema radica en el
rendimiento, que por supuesto se me va al sótano.
Actualmente cargo un datatable y aún así tarda muchísimo en realizar
la carga (antes de recorrerlo y operar)
¿a alguien se le ocurre una idea?

Ah. Ya se me olvidaba, trabajo en C# en Windows Forms.

Gracias por adelantado a todo el mundo.

Preguntas similare

Leer las respuestas

#6 Pablo Roca
23/11/2007 - 15:17 | Informe spam
"Gonzalo Rodríguez Carrera" escribió en el mensaje
news:3f5ccec7-7e48-4fac-ab27-



Hombre si es un proceso batch .. pues lo que te comenta Alberto tampoco vá a
ser gran problema. Ejecutalo a una hora en la que no haya uso de la base de
datos y punto.

Por detallar más, las operaciones de dicha tabla son por un lado
logico/matemáticas y por otro lectura de ficheros planos, asi que no
veo como usar un procedimiento almacenado.



Si eso vá a ser frecuente, pues yo tendría la infromación prepararia lo mas
preprocesada posible para que la actualización sea solo despues hacer un
append de datos.

Si puedes hacer lo que quieras de operaciones matematicas en un
procedimiento almacenado de SQL Server ... mirate los procedimientos
almacenados CLR (donde puedes escribir codigo en un lenguaje de .NET)


Saludos,

Pablo Roca
La Coruna - Spain
http://www.portalfox.com
Respuesta Responder a este mensaje
#7 Gonzalo Rodríguez Carrera
03/12/2007 - 11:09 | Informe spam
On 23 nov, 15:17, "Pablo Roca" wrote:
>"Gonzalo Rodríguez Carrera" escribió en el mensaje
>news:3f5ccec7-7e48-4fac-ab27-

Hombre si es un proceso batch .. pues lo que te comenta Alberto tampoco vá a
ser gran problema. Ejecutalo a una hora en la que no haya uso de la base de
datos y punto.

>Por detallar más, las operaciones de dicha tabla son por un lado
>logico/matemáticas y por otro lectura de ficheros planos, asi que no
>veo como usar un procedimiento almacenado.

Si eso vá a ser frecuente, pues yo tendría la infromación prepararia lo mas
preprocesada posible para que la actualización sea solo despues hacer un
append de datos.

Si puedes hacer lo que quieras de operaciones matematicas en un
procedimiento almacenado de SQL Server ... mirate los procedimientos
almacenados CLR (donde puedes escribir codigo en un lenguaje de .NET)


Saludos,

Pablo Roca
La Coruna - Spainhttp://www.portalfox.com




Bueno, por si a alguien todavía le interesa he conseguido dejar el
proceso en 13 minutos de media.

1. Al inicio cargo todos los elementos que vayan a intervenir en la
operacion a memoria, prácticamente todos serán datatables.
2. Cargo todos los productos que van a ser actualizados (solo los que
van a ser actualizados, ya que me reduce en un 30% aproximadamente el
número de registros) en un datatable "especial" (un objeto que usamos
en la empresa con muchos métodos y props y a mayores un datatable) y
por otro lado los datos de la actualización.
3. Hago un for recorriendo este segundo datatable y voy actualizando
el primero (en memoria) esto se hace en unos cuantos segundos (34"07
de media)
4. Descargo de memoria el segundo datatable y todos los datatables de
apoyo.
5. Lanzo un método de ese objeto datatable nuestro y creo "páginas" de
100 en 100 updates y se las mando una a una a SQLServer (unos 3 min de
actualización). Enviarselas en grupo a SQLServer da mejor resultado
que enviarselas una a una, pero ojito, no obtengo información de en
donde rompe en caso de que falle alguna (asi que testea los datos
previamente).

6. Finalmente repito el proceso para las inserciones nuevas, 30% de
los articulos aprox.

Despues, eso sí hubo mucho trabajo de depuración de código (fue una
tarea ardua pero muy reconfortante). Aprovechar ciclos que
aparentemente no podrias, cargar y descargar la memoria segun se
necesite, no tener cosas "demás", tener cuidado en las querys e
intentar traer e-xac-ta-men-te lo que se necesita, etc...

Me resulto muy interesante.

Como punto y final. Millones de gracias a todos los que me habéis oido
y echado un cable.
Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida