Otimize o acesso à base de dados do Jellyfin para contentores simultâneos, garantindo primeiro que existe um único proprietário da base de dados e medindo depois as esperas por bloqueios, os picos de escrita, a latência do armazenamento e a sobreposição das cargas de trabalho.
Há vários contentores a abrir a mesma base de dados do Jellyfin ou um único contentor do Jellyfin está lento durante as análises e a atividade dos utilizadores? Não aumente o número de ligações às cegas. Identifique o tipo de base de dados, os escritores ativos, a localização do ponto de montagem, o método de cópia de segurança e a operação exata que está à espera antes de alterar o backend ou o conjunto de ligações.
Comprove se o limite é o bloqueio ou o armazenamento
Registe as mensagens de base de dados ocupada ou bloqueada, a duração das transações, a latência de E/S, a espera do CPU e as tarefas simultâneas em execução. O SQLite permite leituras simultâneas, mas serializa as escritas, pelo que muitos escritores podem transformar uma curta atualização de metadados numa fila (comportamento de bloqueio do SQLite).
Mova a base de dados para armazenamento local rápido apenas como teste controlado. Se as esperas por bloqueios persistirem enquanto a latência do armazenamento diminuir, o problema é a sobreposição de escritores ou o desenho da base de dados, não apenas o disco.
Compare as esperas por bloqueios com a latência do armazenamento durante a mesma análise. Se a base de dados for rápida, mas os escritores ficarem à espera, o agendamento e a atribuição de propriedade — e não outra ligação — são o próximo controlo.
Atribua a propriedade da base de dados e agende os escritores
Apenas uma instância do Jellyfin deve ser proprietária de uma determinada base de dados da aplicação, salvo se o backend suportado e a implementação fornecerem explicitamente coordenação entre várias instâncias. Evite iniciar análises, atualizações de metadados, importações, cópias de segurança e manutenção ao mesmo tempo. Utilize uma identidade de contentor e um caminho persistente, para que um reinício não crie uma segunda base de dados.
Valide executando primeiro uma análise, depois uma carga de trabalho de utilizador e, por fim, a combinação simultânea normal. Compare as esperas por bloqueios e o tempo de conclusão após introduzir cada escritor adicional.
Execute o teste com um escritor e, em seguida, adicione a carga de trabalho normal dos contentores simultâneos. Isto permite determinar se cada escritor adicional aumenta o tempo de fila ou apenas acrescenta leituras inofensivas.
Saiba quando se justifica um backend diferente
Um backend de maior capacidade, como o PostgreSQL, pode valer a pena quando a carga de trabalho exigir genuinamente vários escritores da aplicação, uma atividade simultânea mais intensa ou ferramentas operacionais que o SQLite não consiga fornecer. Também acrescenta migrações, credenciais, cópias de segurança, falhas de rede e outro serviço para recuperar. Uma discussão do projeto observa que a simultaneidade à escala comercial está fora do objetivo normal do Jellyfin para servidores domésticos; por isso, não aplique pressupostos empresariais sobre ligações numa implementação doméstica (discussão sobre simultaneidade delimitada).
Se testar uma alteração de backend, mantenha disponível a base de dados original e a definição da implementação, para que a comparação possa ser revertida sem alterar o estado da aplicação.
Compare as esperas por bloqueios com a latência do armazenamento durante a mesma análise. Se a base de dados for rápida, mas os escritores ficarem à espera, o agendamento e a atribuição de propriedade — e não outra ligação — são o próximo controlo.
Valide a configuração escolhida
Reinicie todos os contentores, execute a carga de trabalho simultânea original e confirme que as esperas por bloqueios, a latência, as ações dos utilizadores e as cópias de segurança permanecem dentro do limite aceite. Pare de ajustar quando a base de dados concluir a carga de trabalho com um único proprietário claro e um procedimento de restauro testado. Escale o problema quando persistirem corrupção, falhas repetidas de bloqueio ou escritas não suportadas por várias instâncias após as verificações reversíveis de agendamento e armazenamento.
Execute o teste com um escritor e, em seguida, adicione a carga de trabalho normal dos contentores simultâneos. Isto permite determinar se cada escritor adicional aumenta o tempo de fila ou apenas acrescenta leituras inofensivas.
Se testar uma alteração de backend, mantenha disponível a base de dados original e a definição da implementação, para que a comparação possa ser revertida sem alterar o estado da aplicação.
Suporte e Dicas
Mais para Ler

Como evitar tarefas ou importações duplicadas no Jellyfin
O trabalho duplicado geralmente resulta de agendadores sobrepostos ou de mais do que um processo de escrita; atribua um responsável, um caminho e uma...

Como reparar o Jellyfin depois de o volume da base de dados ficar cheio
Pare as gravações, preserve a base de dados e os ficheiros WAL, liberte espaço sem eliminar o estado de forma indiscriminada e, em seguida,...

Porque é que o Jellyfin recria ficheiros em falta com o proprietário errado?
A propriedade incorreta deve-se normalmente a uma incompatibilidade de identidade ou a um caminho de importação diferente; confirme o utilizador ativo do contentor antes...

