Joplin server

Operating system

Linux

Joplin version

3.4.3

Desktop version info

Joplin 3.3.12 (Linux Desktop)
Joplin Mobile 13.3.3 (iOS)

Sync target

Joplin Server

What issue do you have?

Joplin server and database is hosted on an Unraid server.

I've recently been encountering sync problems on my self-hosted Joplin server. Different clients, iOS and Linux, will give problems.

Switched from pure database storage to filesystem storage with database fallback to resolve KnexTimeoutError issues, but the problem persists. Delta sync queries are still timing out at 60 seconds and exhausting the connection pool, even though new content should be going to filesystem.

I'm not really sure what to try next.

20:33:53 1|app  | 2025-12-03 20:33:53: [error] App: 192.168.200.147 KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
20:33:53 1|app  |     at Client_PG.acquireConnection (/home/joplin/packages/server/node_modules/knex/lib/client.js:332:26)
20:33:53 1|app  |     at runNextTicks (node:internal/process/task_queues:60:5)
20:33:53 1|app  |     at listOnTimeout (node:internal/timers:538:9)
20:33:53 1|app  |     at processTimers (node:internal/timers:512:7)
20:33:53 1|app  |     at Runner.ensureConnection (/home/joplin/packages/server/node_modules/knex/lib/execution/runner.js:305:28)
20:33:53 1|app  |     at Runner.run (/home/joplin/packages/server/node_modules/knex/lib/execution/runner.js:30:19)
20:33:53 1|app  |     at StorageDriverDatabase.read (/home/joplin/packages/server/src/models/items/storage/StorageDriverDatabase.ts:40:15)
20:33:53 1|app  |     at async Promise.all (index 140)
20:33:53 1|app  |     at ItemModel.loadWithContentMulti (/home/joplin/packages/server/src/models/ItemModel.ts:299:3)
20:33:53 1|app  |     at ChangeModel.delta (/home/joplin/packages/server/src/models/ChangeModel.ts:276:12) {
20:33:53 1|app  |   sql: undefined,
20:33:53 1|app  |   bindings: undefined
20:33:53 1|app  | }
20:33:53 1|app  | 2025-12-03 20:33:53: App: GET /api/items/root:/:/delta (500) (60726ms)
20:33:56 1|app  | 2025-12-03 20:33:56: [error] TaskService: Failed running task #13 (Log heartbeat message) KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
20:33:56 1|app  |     at Client_PG.acquireConnection (/home/joplin/packages/server/node_modules/knex/lib/client.js:332:26)
20:33:56 1|app  |     at runNextTicks (node:internal/process/task_queues:60:5)
20:33:56 1|app  |     at processTimers (node:internal/timers:509:9)
20:33:56 1|app  |     at Runner.ensureConnection (/home/joplin/packages/server/node_modules/knex/lib/execution/runner.js:305:28)
20:33:56 1|app  |     at Runner.run (/home/joplin/packages/server/node_modules/knex/lib/execution/runner.js:30:19)
20:33:56 1|app  |     at TaskStateModel.stop (/home/joplin/packages/server/src/models/TaskStateModel.ts:43:17)
20:33:56 1|app  |     at TaskService.runTask (/home/joplin/packages/server/src/services/TaskService.ts:151:3)
20:33:56 1|app  |     at runTaskWithErrorChecking (/home/joplin/packages/server/src/services/TaskService.ts:177:6)
20:33:56 1|app  |     at Task._execution (/home/joplin/packages/server/src/services/TaskService.ts:196:6) {
20:33:56 1|app  |   sql: undefined,
20:33:56 1|app  |   bindings: undefined
20:33:56 1|app  | }
20:34:03 1|app  | 2025-12-03 20:34:03: [warn] TaskService: Tried to start #11 (Process shared items) but it was already running
20:34:06 1|app  | 2025-12-03 20:34:06: TaskService: Running #11 (Process shared items) (scheduled)...
20:34:06 1|app  | 2025-12-03 20:34:06: ShareModel: updateSharedItems3#1: Start: Main