Hola a todos.
Tengo un proceso en sqlserver 2k SP3.
El proceso que lanzo ha de tratar millones de registros cada día.
De todo el proceso, hay un punto donde quito indices, cargo unos
50.000 registros (inserts y updates), y luego vuelvo a poner los
índices.
Pensaba que este sistema aceleraría la carga de registros, al no haber
índices por en medio.
La cuestión es que es así, pero el problema que tengo ahora es que
solo en quitar y volver a poner los índices tarda muchísimo !!!!!
Mucho más que la carga de los 50.000 registros !!!!!
La tabla tiene 8 millones de registros.
Supongo que estoy haciéndolo mal, y no debería tocar los índices.
Además, existen otros procesos que se ejecutan en paralelo con este
proceso a diferentes tablas. Entre ellas no tienen nada que ver, pero
corren bajo el mismo servidor. Quizás eso también esté
penalizando.
Además, llega un momento en que pierde el usuario de conexión a la
bbdd cuando lleva la mitad del índice creado (unos 20 minutos de
proceso), y para el proceso. (El error dice user: NULL).
Sin embargo, ese mismo proceso lo ejecuto en otro punto, y no peta ni
pierde el usuario de conexión.
No siempre pierde el usuario de conexión, pero sí muy a menudo.
Me imagino que tendía que:
1) no tocar los índices
2) no ejecutar en paralelo esos procesos.
No sé qué hacer, mi idea lógicamente es que no pierda el usuario de
conexión, y que se agilice el tiempo de carga de datos.
Por cierto, el mecanismo de mis procesos nacen desde un programa VB
que mediante un SHELL va lanzando otros programas VB. Estos últimos
son los que se conectan con la BBDD y ejecutan los stored procedures.
Gracias de antemano a todos por la atención.
Leer las respuestas