Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Acelerar Inserts

Estas en el tema de Acelerar Inserts en el foro de Bases de Datos General en Foros del Web. Hola Recientemente me cambie de SQL SERVER EXPRESS a SQL LITE y ahora tengo el problema algo que era casi instantáneo ahora demora 7 a ...
  #1 (permalink)  
Antiguo 29/09/2011, 15:00
Avatar de Highlander  
Fecha de Ingreso: junio-2006
Ubicación: Concepción, Chile
Mensajes: 475
Antigüedad: 18 años, 5 meses
Puntos: 4
Acelerar Inserts

Hola Recientemente me cambie de SQL SERVER EXPRESS a SQL LITE y ahora tengo el problema algo que era casi instantáneo ahora demora 7 a 10 seg.

Lo que demora son los inserts, que son 100.

Ejemplo:
Código:
INSERT INTO RECIPE_NUT_DATA (NDB_No, NutrDesc, Unit, NutrVal, Porcion, SR_Order, Nutr_No) VALUES(@NDB_No, @NutrDesc, @Unit, @NutrVal, @Porcion, @SR_Order, @Nutr_No)
Probe apagar el JOURNALING pero solo mejoro en 1 seg.

Alguna sugerencia?
__________________
Ingeniero (E) en Computación e Informática
The last man alone with god.
  #2 (permalink)  
Antiguo 29/09/2011, 21:03
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Acelerar Inserts

Está claro que 7 a 10 segundos para insertar 100 registros es lento para cualquier motor de base de datos, de todos modos, por más óptima que sea la configuración de sqlite, no esperes que supere los tiempos de SQL Server, aún si se trata de la edición Express, son productos muy diferentes.

En el caso de muchas operaciones de insert consecutivas, lo que puede generar lentitud es el concepto de atomicidad de sqlite, esto significa que si la transacción es implícita (comportamiento por defecto), hará un commit por cada uno de los 100 insert, y en cada commit se produce un checkpoint, y cada checkpoint implica pasar datos del fichero WAL (fichero que almacena información en caso de rollback) a la base de datos, en conclusión, tienes 100 transacciones y 100 operaciones de I/O, para evitar esto, puedes encapsular los inserts en una única transacción explícita y ver que diferencia tienes en rendimiento.

Código:
begin transaction
insert 1...
insert 2...
...........
insert 100...
commit transaction
Saludos
  #3 (permalink)  
Antiguo 30/09/2011, 08:51
Avatar de Highlander  
Fecha de Ingreso: junio-2006
Ubicación: Concepción, Chile
Mensajes: 475
Antigüedad: 18 años, 5 meses
Puntos: 4
Respuesta: Acelerar Inserts

Cita:
Iniciado por matanga Ver Mensaje
Está claro que 7 a 10 segundos para insertar 100 registros es lento para cualquier motor de base de datos, de todos modos, por más óptima que sea la configuración de sqlite, no esperes que supere los tiempos de SQL Server, aún si se trata de la edición Express, son productos muy diferentes.

En el caso de muchas operaciones de insert consecutivas, lo que puede generar lentitud es el concepto de atomicidad de sqlite, esto significa que si la transacción es implícita (comportamiento por defecto), hará un commit por cada uno de los 100 insert, y en cada commit se produce un checkpoint, y cada checkpoint implica pasar datos del fichero WAL (fichero que almacena información en caso de rollback) a la base de datos, en conclusión, tienes 100 transacciones y 100 operaciones de I/O, para evitar esto, puedes encapsular los inserts en una única transacción explícita y ver que diferencia tienes en rendimiento.

Código:
begin transaction
insert 1...
insert 2...
...........
insert 100...
commit transaction
Saludos

Estimado


Con la transaccion el tiempo bajo de 10 sec a 0.175seg XD
__________________
Ingeniero (E) en Computación e Informática
The last man alone with god.

Etiquetas: acelerar, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:18.