К содержимому
Tickwise
ОшибкаБазы данныхSIG-DB-007

SQLite заблокирована (SQLITE_BUSY: database is locked)

Платформы
Paper · Purpur · Velocity · один сервер
Проверено
Проверено
Уверенность
Уверенность 80%

Как это выглядит в логе

Достаточно одной из строк. Агент сверяет их с логом локально, на вашем сервере.

logs/latest.log
  • [WARN] database is locked

Симптомы

  • Запись плагина в SQLite падает: «[SQLITE_BUSY] The database file is locked (database is locked)»

Причина

Файл SQLite занят другой транзакцией или процессом дольше busy_timeout: плагин пишет из нескольких потоков/соединений или файл открыт ещё одним процессом.

Вероятные причины

  • Плагин держит несколько соединений к одному файлу SQLite и пишет конкурентно (долгая транзакция блокирует остальных)
  • Файл базы открыт другим процессом: второй экземпляр сервера на той же папке, бэкап/синхронизация, внешний просмотрщик БД
  • Медленный диск/сетевая ФС (NFS, SMB) — блокировки SQLite работают плохо или долго

Как исправитьНизкий риск

  1. Убедитесь, что папку сервера использует только один процесс (нет второго запущенного экземпляра, внешних программ, открывших .db).
  2. Не держите файлы SQLite на сетевых дисках; перенесите сервер на локальный диск.
  3. Отключите бэкапы, копирующие .db «на живую», или делайте их при остановленном сервере.
  4. Для сети серверов и больших объёмов переведите плагин на MySQL/MariaDB — SQLite рассчитана на один процесс.
  5. Если ошибка в одном плагине — обновите его; сообщите автору, если он пишет в SQLite из нескольких потоков.

Источники