2011-08-26 24 views
9

Estoy tratando de insertar una gran cantidad de registros (en millones) en una base de datos SQLite. Los datos se leen desde una secuencia de archivos (C++). Si comienzo una sola transacción, realizo todas las de las inserciones y luego confirmo la transacción, solo obtengo un porcentaje muy pequeño de registros realmente insertados en mi base de datos.Número de transacciones de SQLite ¿Límite?

Las que están insertadas parecen aleatorias: realmente no puedo ver ningún patrón para cuáles se insertan y cuáles se excluyen. Sin embargo, si confirmo y luego comienzo la transacción nuevamente después de algo así como 2000 inserciones, no tengo este problema y todos los registros se insertan, aunque el proceso es mucho más más lento. Entonces ...

¿Hay un límite estricto de cuántas inserciones se pueden hacer dentro de una transacción? ¿Hay alguna manera de cambiar este límite?

+1

Tengo también este problema. Solo voy a publicar esto aquí para la posteridad. Si se encuentra con esto, primero debe intentar agrupar solo 1k-2k inserciones por transacción para ver si este es realmente el problema. –

Respuesta

13

Puedo insertar 10 millones de filas en una sola transacción sin ningún problema.

Mis conjeturas:

  • va a insertar demasiado filas en una sola instrucción y golpear Profundidad máxima de un límite de árbol de expresión. Esto se puede apagar por completo.
  • está utilizando inserciones demasiado largas sin valores de enlace y pulsando Longitud máxima de un límite de instrucción SQL. En este caso, use el enlace de parámetros.
  • que puede haber un error en la librería (que son la comprobación de cada retorno de la API para los códigos de error?)

Comprobar Limits In SQLite. Puede ayudar si muestra cómo prepara y ejecuta INSERT en el código.

Cuestiones relacionadas