Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-05-2012
papote654 papote654 is offline
Miembro
 
Registrado: nov 2006
Posts: 29
Poder: 0
papote654 Va por buen camino
Insert masivo de datos, cada vez mas lento

Gracias anticipadas por su ayuda.

Estoy haciendo un insert masivo de datos en SQL 2008 los cuales lo obtengo de un archivo .txt, el caso es que recorro una carpeta con 80 archivos .txt podrían ser más o menos, lleno una variable con los datos del archivo y luego lo inserto en SQL y así sucesivamente, el problema está en que mientras más datos mando a insertar más lento se va haciendo el proceso del insert.

Si inserto un .txt de 1kb solo dura unas cuantas milésimas de segundo, continuando inserto un .txt de 500kb y dura 30 segundos, continuando inserto un .txt de 1kb pero este en vez de durarme unos cuantos milésimas de segundo como el primero me dura varios segundo, es decir al momento de insertar en SQL cada vez se pone más lento.

Espero haberme dado a entender, agradeceré cualquier colaboración.

Gracias...
__________________
Al que no le gusta enseñar, no merece aprender...
Responder Con Cita
  #2  
Antiguo 14-05-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Como lo haces? cual es el código con el que haces esto? desde donde lo haces? delphi, .Net, desde el mismo SQL, danos mas datos, así te podremos ayudar.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #3  
Antiguo 14-05-2012
papote654 papote654 is offline
Miembro
 
Registrado: nov 2006
Posts: 29
Poder: 0
papote654 Va por buen camino
Gracias mightydragonlor por responder, lo hago con delphi 7, en una carpeta tengo un simnumero de archivos.txt que son las tablas a exportar, leo esta carpeta y recorro cada uno de esos archivos, "todo esto es muy rapido", dentro de estos archivos estan cada uno de los registros los cuales los cargo en una variable para luego insertarlo en la db.

--esta es la idea de como quedan
Código SQL [-]
INSERT INTO tabla (campos) VALUES ("datos")
INSERT INTO tabla (campos) VALUES ("datos")
INSERT INTO tabla (campos) VALUES ("datos")

Imagina que tengo 10,000 registros en un archivo, pues el insert estara 10,000 veces y lo ejecuto todo junto en un solo comando como se ve en el codigo anterior.

Gracias..
__________________
Al que no le gusta enseñar, no merece aprender...
Responder Con Cita
  #4  
Antiguo 14-05-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Entiendo, y creo armas una variable con 10 mil líneas de insert into y luego la mandas a la base de datos, lo que sucede con esto es que se genera una transacción gigantesca que hacer que la siguiente línea aún guarda información de la transacción anterior, te recomiendo que entre cada línea pongas un GO, ejemplo:

Código SQL [-]
INSERT INTO tabla (campos) VALUES ("datos")
GO
INSERT INTO tabla (campos) VALUES ("datos")
GO
INSERT INTO tabla (campos) VALUES ("datos")
GO

También que desactives la transacción desde delphi, con esto debería mejorar notablemente.

Saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #5  
Antiguo 14-05-2012
papote654 papote654 is offline
Miembro
 
Registrado: nov 2006
Posts: 29
Poder: 0
papote654 Va por buen camino
Cuando dices desactive las transacciones de delphi a que te refieres?, tambien pense en crear un BEGIN TRANS en el codigo de SQL.
__________________
Al que no le gusta enseñar, no merece aprender...
Responder Con Cita
  #6  
Antiguo 14-05-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
dependiendo del control que uses para la conexión de base de datos, tienes un componente Transaction, con ropiedades, autocommit, active y demás, si este es el caso, lo pones en active false y listo.

Saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Insert múltiple (o masivo) santiago14 SQL 24 12-03-2011 13:19:31
Insert masivo en firebird santiago14 Firebird e Interbase 2 24-05-2010 02:50:29
Interbase cada vez más lento... AMINOA2R Firebird e Interbase 1 17-11-2005 17:47:00
Un Insert muy lento......... sitrico Conexión con bases de datos 9 30-05-2005 15:52:21


La franja horaria es GMT +2. Ahora son las 16:39:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi