Optimiza el acceso a la base de datos de Jellyfin para contenedores simultáneos asegurándote primero de que haya un único propietario de la base de datos y midiendo después las esperas por bloqueos, los picos de escritura, la latencia del almacenamiento y la superposición de cargas de trabajo.
¿Hay varios contenedores abriendo la misma base de datos de Jellyfin, o un contenedor de Jellyfin funciona lentamente durante los análisis y la actividad de los usuarios? No aumentes el número de conexiones a ciegas. Identifica el tipo de base de datos, los escritores activos, la ubicación del montaje, el método de copia de seguridad y la operación exacta que está esperando antes de cambiar el backend o el grupo de conexiones.
Demuestra si el límite está en los bloqueos o en el almacenamiento
Registra los mensajes de base de datos ocupada o bloqueada, la duración de las transacciones, la latencia de E/S, la espera de CPU y las tareas simultáneas que se ejecutan al mismo tiempo. SQLite permite lecturas simultáneas, pero serializa las escrituras, por lo que muchos escritores pueden convertir una breve actualización de metadatos en una cola (comportamiento de bloqueo de SQLite).
Mueve la base de datos a un almacenamiento local rápido únicamente como prueba controlada. Si las esperas por bloqueos continúan mientras disminuye la latencia del almacenamiento, el problema es la superposición de escritores o el diseño de la base de datos, no solo el disco.
Compara las esperas por bloqueos con la latencia del almacenamiento durante el mismo análisis. Si la base de datos es rápida, pero los escritores esperan, la programación y la propiedad —no otra conexión— son el siguiente aspecto que debes controlar.
Asigna la propiedad de la base de datos y programa los escritores
Solo una instancia de Jellyfin debería ser propietaria de una determinada base de datos de la aplicación, a menos que el backend compatible y la implementación proporcionen explícitamente coordinación entre varias instancias. Evita que los análisis, las actualizaciones de metadatos, las importaciones, las copias de seguridad y el mantenimiento comiencen al mismo tiempo. Usa una identidad de contenedor y una ruta persistente para que un reinicio no cree una segunda base de datos.
Valídalo ejecutando primero un análisis, después una carga de trabajo de usuario y, por último, la combinación simultánea habitual. Compara las esperas por bloqueos y el tiempo de finalización después de introducir cada escritor adicional.
Ejecuta la prueba con un escritor y, después, añade la carga de trabajo normal de contenedores simultáneos. Así podrás determinar si cada escritor añadido aumenta el tiempo de espera en la cola o simplemente agrega lecturas inofensivas.
Determina cuándo se justifica otro backend
Puede valer la pena evaluar un backend más grande, como PostgreSQL, cuando la carga de trabajo realmente requiera varios escritores de la aplicación, una mayor actividad simultánea o herramientas operativas que SQLite no pueda proporcionar. También añade migraciones, credenciales, copias de seguridad, fallos de red y otro servicio que habrá que recuperar. Un debate del proyecto señala que la simultaneidad a escala comercial está fuera del objetivo habitual de Jellyfin para servidores domésticos, así que no importes supuestos empresariales sobre conexiones en una implementación doméstica (debate sobre la simultaneidad en un ámbito definido).
Si pruebas un cambio de backend, conserva la base de datos original y la definición de implementación para poder revertir la comparación sin cambiar el estado de la aplicación.
Compara las esperas por bloqueos con la latencia del almacenamiento durante el mismo análisis. Si la base de datos es rápida, pero los escritores esperan, la programación y la propiedad —no otra conexión— son el siguiente aspecto que debes controlar.
Valida la configuración elegida
Reinicia todos los contenedores, ejecuta la carga de trabajo simultánea original y confirma que las esperas por bloqueos, la latencia, las acciones de los usuarios y las copias de seguridad se mantienen dentro del límite aceptado. Deja de ajustar la configuración cuando la base de datos complete la carga de trabajo con un único propietario claro y un proceso de restauración probado. Solicita asistencia cuando persistan la corrupción, los fallos repetidos de bloqueo o las escrituras no compatibles de varias instancias después de realizar las comprobaciones reversibles de programación y almacenamiento.
Ejecuta la prueba con un escritor y, después, añade la carga de trabajo normal de contenedores simultáneos. Así podrás determinar si cada escritor añadido aumenta el tiempo de espera en la cola o simplemente agrega lecturas inofensivas.
Si pruebas un cambio de backend, conserva la base de datos original y la definición de implementación para poder revertir la comparación sin cambiar el estado de la aplicación.
Soporte y Consejos
Más para leer

Cómo evitar trabajos o importaciones duplicados en Jellyfin
El trabajo duplicado suele deberse a programadores superpuestos o a más de un escritor; asigna un único responsable, una única ruta y una única...

Cómo reparar Jellyfin después de que su volumen de base de datos se llene
Detén las escrituras, conserva la base de datos y los archivos WAL, libera espacio sin eliminar el estado a ciegas y, después, verifica la...

¿Por qué Jellyfin vuelve a crear los archivos que faltan con el propietario incorrecto?
La propiedad incorrecta suele deberse a una discrepancia de identidad o a una ruta de importación diferente; comprueba el usuario activo del contenedor antes...

