Falla
Los servicios NDD Print Host y NDD Print Releaser no están disponibles debido al error “Database is locked”, que impide el almacenamiento de datos en la base de datos SQLite.
Síntomas
-
Fallos temporales en la comunicación entre los componentes de la solución.
-
Pérdida momentánea en el procesamiento de solicitudes.
-
Indisponibilidad de los servicios de sincronización de caché.
-
Necesidad frecuente de reiniciar manualmente los servicios.
-
Aumento de la frecuencia de las llamadas al servicio de asistencia técnica.
Pruebas
En el Visor de eventos (Event Viewer) de Windows, en Logs de aplicaciones, se pueden identificar registros como el del ejemplo siguiente:
Falla al ejecutar la sincronización - Excepción: System.AggregateException:
Uno o más errores...
-> System.Data.Entity.Infrastructure.CommitFailedException:
Se ha producido un error al confirmar una transacción de la base de datos...
-> System.Data.SQLite.SQLiteException:
database is locked
El error se produce durante la sincronización de la caché o al confirmar las transacciones de la base de datos.
Causa
Los módulos NDD Print Host y NDD Print Releaser utilizan, de forma estándar, la base de datos SQLite.
SQLite es una base de datos de un solo archivo, adecuada para entornos sencillos, pruebas o pequeñas implementaciones. Sin embargo, presenta una limitación importante en cuanto a la concurrencia: solo permite un proceso de escritura a la vez.
En entornos corporativos con un gran volumen de impresiones, múltiples usuarios y equipos que realizan operaciones simultáneas, pueden producirse varias operaciones de escritura al mismo tiempo. En estas situaciones, el archivo de la base de datos queda bloqueado temporalmente, lo que provoca el error:
System.Data.SQLite.SQLiteException: database is locked
Esta limitación es inherente a SQLite y se produce con mayor frecuencia a medida que aumenta la carga de uso del entorno.
Solución
Migrar la base de datos de la aplicación a Microsoft SQL Server.
SQL Server tiene una arquitectura cliente-servidor y fue creado para entornos corporativos, ofreciendo:
-
Compatibilidad con una alta concurrencia de accesos.
-
Control avanzado de bloqueos.
-
Mejor rendimiento en operaciones simultáneas.
-
Mayor escalabilidad.
-
Mayor estabilidad en entornos con un alto volumen de impresión.
La edición SQL Server Express es adecuada para la mayoría de las implementaciones que no requieren recursos corporativos avanzados.
Recomendaciones
Nuevas implementaciones
Utiliza Microsoft SQL Server como base de datos estándar desde el principio.
Entornos existentes
Planifica la migración de SQLite a SQL Server cuando se den las siguientes circunstancias:
-
aparición recurrente del error “database is locked”.
-
aumento del volumen de impresiones.
-
crecimiento del número de usuarios.
-
ampliación del número de equipos monitorizados.
Comparativa técnica
|
Característica |
SQLite |
Microsoft SQL Server |
|---|---|---|
|
Arquitectura general |
Basado en un único archivo local |
Servidor dedicado corporativo multiusuario |
|
Escritura simultánea |
Solo un proceso a la vez |
Alta concurrencia con bloqueos a nivel de registro o de página |
|
Comportamiento bajo carga |
Cuellos de botella y el error “database is locked” |
Optimización del rendimiento y recuperación automática |
|
Escalabilidad futura |
Limitada para la ampliación de las infraestructuras |
Alta escalabilidad y capacidad para adaptarse al crecimiento |