Lost monitors in web UI but still getting emails #4112

Closed
opened 2026-02-28 03:51:30 -05:00 by deekerman · 3 comments
Owner

Originally created by @michaellenaghan on GitHub (Apr 29, 2025).

⚠️ Please verify that your question has not already been reported

🛡️ Security Policy

📝 Describe your problem

I have no monitors in the web UI, but I'm still getting emails?

Not sure where to begin looking.

I'm running 1.23.16 on fly.io.

Here's my fly.toml.

app = "xxx"
primary_region = "xxx"
kill_signal = "SIGINT"
kill_timeout = "5s"
swap_size_mb = 256

[build]
  image = "louislam/uptime-kuma:1"

[[mounts]]
  source = "xxx"
  destination = "/app/data"

[http_service]
  auto_start_machines = true
  auto_stop_machines = false
  force_https = true
  internal_port = 3001
  min_machines_running = 1
  processes = ["app"]

I can ssh into my fly machine, run sqlite3 on the database, and see that there are monitors in the monitor table.

I've included the last 150 lines from error.log below.

📝 Error Message(s) or Log

at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19)
    at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22)
    at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22)
    at async Monitor.calcUptime (/app/server/model/monitor.js:1261:22)
    at async Monitor.sendUptime (/app/server/model/monitor.js:1327:24)
    at async Monitor.sendStats (/app/server/model/monitor.js:1195:13) {
  sql: '\n' +
    '            SELECT\n' +
    '               -- SUM all duration, also trim off the beat out of time window\n' +
    '                SUM(\n' +
    '                    CASE\n' +
    '                        WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' +
    '                        THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' +
    '                        ELSE duration\n' +
    '                    END\n' +
    '                ) AS total_duration,\n' +
    '\n' +
    '               -- SUM all uptime duration, also trim off the beat out of time window\n' +
    '                SUM(\n' +
    '                    CASE\n' +
    '                        WHEN (status = 1 OR status = 3)\n' +
    '                        THEN\n' +
    '                            CASE\n' +
    '                                WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' +
    '                                    THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' +
    '                                ELSE duration\n' +
    '                            END\n' +
    '                        END\n' +
    '                ) AS uptime_duration\n' +
    '            FROM heartbeat\n' +
    '            WHERE time > ?\n' +
    '            AND monitor_id = ?\n' +
    '        ',
  bindings: [
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    36
  ]
}
[2025-04-29 20:15:16] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
    at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:538:9)
    at process.processTimers (node:internal/timers:512:7)
    at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28)
    at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19)
    at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22)
    at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22)
    at async Monitor.calcUptime (/app/server/model/monitor.js:1261:22)
    at async Monitor.sendUptime (/app/server/model/monitor.js:1327:24) {
  sql: '\n' +
    '            SELECT\n' +
    '               -- SUM all duration, also trim off the beat out of time window\n' +
    '                SUM(\n' +
    '                    CASE\n' +
    '                        WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' +
    '                        THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' +
    '                        ELSE duration\n' +
    '                    END\n' +
    '                ) AS total_duration,\n' +
    '\n' +
    '               -- SUM all uptime duration, also trim off the beat out of time window\n' +
    '                SUM(\n' +
    '                    CASE\n' +
    '                        WHEN (status = 1 OR status = 3)\n' +
    '                        THEN\n' +
    '                            CASE\n' +
    '                                WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' +
    '                                    THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' +
    '                                ELSE duration\n' +
    '                            END\n' +
    '                        END\n' +
    '                ) AS uptime_duration\n' +
    '            FROM heartbeat\n' +
    '            WHERE time > ?\n' +
    '            AND monitor_id = ?\n' +
    '        ',
  bindings: [
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    38
  ]
}
[2025-04-29 20:15:16] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
    at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:538:9)
    at process.processTimers (node:internal/timers:512:7)
    at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28)
    at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19)
    at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22)
    at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22)
    at async Monitor.calcUptime (/app/server/model/monitor.js:1261:22)
    at async Monitor.sendUptime (/app/server/model/monitor.js:1327:24) {
  sql: '\n' +
    '            SELECT\n' +
    '               -- SUM all duration, also trim off the beat out of time window\n' +
    '                SUM(\n' +
    '                    CASE\n' +
    '                        WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' +
    '                        THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' +
    '                        ELSE duration\n' +
    '                    END\n' +
    '                ) AS total_duration,\n' +
    '\n' +
    '               -- SUM all uptime duration, also trim off the beat out of time window\n' +
    '                SUM(\n' +
    '                    CASE\n' +
    '                        WHEN (status = 1 OR status = 3)\n' +
    '                        THEN\n' +
    '                            CASE\n' +
    '                                WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' +
    '                                    THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' +
    '                                ELSE duration\n' +
    '                            END\n' +
    '                        END\n' +
    '                ) AS uptime_duration\n' +
    '            FROM heartbeat\n' +
    '            WHERE time > ?\n' +
    '            AND monitor_id = ?\n' +
    '        ',
  bindings: [
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    '2025-03-31 00:13:13',
    107
  ]
}
[2025-04-29 20:15:16] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
    at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26)
    at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28)
    at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19)
    at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22)
    at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22)
    at async RedBeanNode.getCell (/app/node_modules/redbean-node/dist/redbean-node.js:593:19)
    at async Settings.get (/app/server/settings.js:54:21)
    at async exports.setting (/app/server/util-server.js:610:12)
    at async Proxy.checkCertExpiryNotifications (/app/server/model/monitor.js:1462:30)
    at async Proxy.handleTlsInfo (/app/server/model/monitor.js:1697:13) {
  sql: 'SELECT `value` FROM setting WHERE `key` = ?  limit ?',
  bindings: [ 'tlsExpiryNotifyDays', 1 ]
}

🐻 Uptime-Kuma Version

1.23.16

💻 Operating System and Arch

Official Docker Image

🌐 Browser

Chrome, Safari

🖥️ Deployment Environment

  • Database:
    • SQLite: Embedded
Originally created by @michaellenaghan on GitHub (Apr 29, 2025). ### ⚠️ Please verify that your question has not already been reported - [x] I have searched the [existing issues](https://github.com/louislam/uptime-kuma/issues?q=is%3Aissue%20sort%3Acreated-desc%20) and found no similar reports. ### 🛡️ Security Policy - [x] I have read and agree to Uptime Kuma's [Security Policy](https://github.com/louislam/uptime-kuma/security/policy). ### 📝 Describe your problem I have no monitors in the web UI, but I'm still getting emails? Not sure where to begin looking. I'm running 1.23.16 on fly.io. Here's my fly.toml. ``` app = "xxx" primary_region = "xxx" kill_signal = "SIGINT" kill_timeout = "5s" swap_size_mb = 256 [build] image = "louislam/uptime-kuma:1" [[mounts]] source = "xxx" destination = "/app/data" [http_service] auto_start_machines = true auto_stop_machines = false force_https = true internal_port = 3001 min_machines_running = 1 processes = ["app"] ``` I can ssh into my fly machine, run sqlite3 on the database, and see that there are monitors in the monitor table. I've included the last 150 lines from error.log below. ### 📝 Error Message(s) or Log ```bash session at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19) at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22) at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22) at async Monitor.calcUptime (/app/server/model/monitor.js:1261:22) at async Monitor.sendUptime (/app/server/model/monitor.js:1327:24) at async Monitor.sendStats (/app/server/model/monitor.js:1195:13) { sql: '\n' + ' SELECT\n' + ' -- SUM all duration, also trim off the beat out of time window\n' + ' SUM(\n' + ' CASE\n' + ' WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' + ' THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' + ' ELSE duration\n' + ' END\n' + ' ) AS total_duration,\n' + '\n' + ' -- SUM all uptime duration, also trim off the beat out of time window\n' + ' SUM(\n' + ' CASE\n' + ' WHEN (status = 1 OR status = 3)\n' + ' THEN\n' + ' CASE\n' + ' WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' + ' THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' + ' ELSE duration\n' + ' END\n' + ' END\n' + ' ) AS uptime_duration\n' + ' FROM heartbeat\n' + ' WHERE time > ?\n' + ' AND monitor_id = ?\n' + ' ', bindings: [ '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', 36 ] } [2025-04-29 20:15:16] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call? at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:538:9) at process.processTimers (node:internal/timers:512:7) at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28) at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19) at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22) at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22) at async Monitor.calcUptime (/app/server/model/monitor.js:1261:22) at async Monitor.sendUptime (/app/server/model/monitor.js:1327:24) { sql: '\n' + ' SELECT\n' + ' -- SUM all duration, also trim off the beat out of time window\n' + ' SUM(\n' + ' CASE\n' + ' WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' + ' THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' + ' ELSE duration\n' + ' END\n' + ' ) AS total_duration,\n' + '\n' + ' -- SUM all uptime duration, also trim off the beat out of time window\n' + ' SUM(\n' + ' CASE\n' + ' WHEN (status = 1 OR status = 3)\n' + ' THEN\n' + ' CASE\n' + ' WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' + ' THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' + ' ELSE duration\n' + ' END\n' + ' END\n' + ' ) AS uptime_duration\n' + ' FROM heartbeat\n' + ' WHERE time > ?\n' + ' AND monitor_id = ?\n' + ' ', bindings: [ '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', 38 ] } [2025-04-29 20:15:16] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call? at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:538:9) at process.processTimers (node:internal/timers:512:7) at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28) at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19) at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22) at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22) at async Monitor.calcUptime (/app/server/model/monitor.js:1261:22) at async Monitor.sendUptime (/app/server/model/monitor.js:1327:24) { sql: '\n' + ' SELECT\n' + ' -- SUM all duration, also trim off the beat out of time window\n' + ' SUM(\n' + ' CASE\n' + ' WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' + ' THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' + ' ELSE duration\n' + ' END\n' + ' ) AS total_duration,\n' + '\n' + ' -- SUM all uptime duration, also trim off the beat out of time window\n' + ' SUM(\n' + ' CASE\n' + ' WHEN (status = 1 OR status = 3)\n' + ' THEN\n' + ' CASE\n' + ' WHEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400 < duration\n' + ' THEN (JULIANDAY(`time`) - JULIANDAY(?)) * 86400\n' + ' ELSE duration\n' + ' END\n' + ' END\n' + ' ) AS uptime_duration\n' + ' FROM heartbeat\n' + ' WHERE time > ?\n' + ' AND monitor_id = ?\n' + ' ', bindings: [ '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', '2025-03-31 00:13:13', 107 ] } [2025-04-29 20:15:16] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call? at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26) at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28) at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19) at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22) at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22) at async RedBeanNode.getCell (/app/node_modules/redbean-node/dist/redbean-node.js:593:19) at async Settings.get (/app/server/settings.js:54:21) at async exports.setting (/app/server/util-server.js:610:12) at async Proxy.checkCertExpiryNotifications (/app/server/model/monitor.js:1462:30) at async Proxy.handleTlsInfo (/app/server/model/monitor.js:1697:13) { sql: 'SELECT `value` FROM setting WHERE `key` = ? limit ?', bindings: [ 'tlsExpiryNotifyDays', 1 ] } ``` ### 🐻 Uptime-Kuma Version 1.23.16 ### 💻 Operating System and Arch Official Docker Image ### 🌐 Browser Chrome, Safari ### 🖥️ Deployment Environment - **Database**: - SQLite: Embedded
deekerman 2026-02-28 03:51:30 -05:00
  • closed this issue
  • added the
    help
    label
Author
Owner

@michaellenaghan commented on GitHub (Apr 29, 2025):

Here are some additional errors I see in error.log:

    at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:538:9)
    at process.processTimers (node:internal/timers:512:7)
    at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28)
    at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19)
    at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22)
    at async Monitor.getNotificationList (/app/server/model/monitor.js:1442:32)
    at async Proxy.checkCertExpiryNotifications (/app/server/model/monitor.js:1454:38)
    at async Proxy.handleTlsInfo (/app/server/model/monitor.js:1697:13) {
  sql: 'SELECT notification.* FROM notification, monitor_notification WHERE monitor_id = ? AND monitor_notification.notification_id = notification.id ',
  bindings: [ 6 ]
}
[2025-04-29 21:44:13] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
    at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:538:9)
    at process.processTimers (node:internal/timers:512:7)
    at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28)
    at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19)
    at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22)
    at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22)
    at async RedBeanNode.getCell (/app/node_modules/redbean-node/dist/redbean-node.js:593:19)
    at async Monitor.sendAvgPing (/app/server/model/monitor.js:1209:32) {
  sql: '\n' +
    '            SELECT AVG(ping)\n' +
    '            FROM heartbeat\n' +
    "            WHERE time > DATETIME('now', ? || ' hours')\n" +
    '            AND ping IS NOT NULL\n' +
    '            AND monitor_id = ?  limit ?',
  bindings: [ -24, 99, 1 ]
}

I see that the db file is large — and so is the WAL file:

1.3G -rwxr-xr-x 1 root root 1.3G Apr 30 01:51 kuma.db
 32K -rwxr-xr-x 1 root root  32K Apr 30 01:55 kuma.db-shm
1.3G -rwxr-xr-x 1 root root 1.3G Apr 30 01:55 kuma.db-wal

heartbeat is the only large table:

sqlite> select count(*) from api_key;
0
sqlite> select count(*) from docker_host;
0
sqlite> select count(*) from 'group';
3
sqlite> select count(*) from heartbeat;
8927986
sqlite> select count(*) from incident;
0
sqlite> select count(*) from maintenance;
0
sqlite> select count(*) from maintenance_status_page;
0
sqlite> select count(*) from monitor;
85
sqlite> select count(*) from monitor_group;
11
sqlite> select count(*) from monitor_maintenance;
0
sqlite> select count(*) from monitor_notification;
88
sqlite> select count(*) from monitor_tag;
0
sqlite> select count(*) from monitor_tls_info;
97
sqlite> select count(*) from notification;
2
sqlite> select count(*) from notification_sent_history;
0
sqlite> select count(*) from proxy;
0
sqlite> select count(*) from setting;
11
sqlite> select count(*) from status_page;
1
sqlite> select count(*) from status_page_cname;
0
sqlite> select count(*) from tag;
0
sqlite> select count(*) from user;
1

PRAGMA quick_check; returns ok:

# sqlite3 kuma.db
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite> pragma quick_check;
ok
@michaellenaghan commented on GitHub (Apr 29, 2025): Here are some additional errors I see in error.log: ```[2025-04-29 21:44:13] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call? at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:538:9) at process.processTimers (node:internal/timers:512:7) at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28) at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19) at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22) at async Monitor.getNotificationList (/app/server/model/monitor.js:1442:32) at async Proxy.checkCertExpiryNotifications (/app/server/model/monitor.js:1454:38) at async Proxy.handleTlsInfo (/app/server/model/monitor.js:1697:13) { sql: 'SELECT notification.* FROM notification, monitor_notification WHERE monitor_id = ? AND monitor_notification.notification_id = notification.id ', bindings: [ 6 ] } [2025-04-29 21:44:13] KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call? at Client_SQLite3.acquireConnection (/app/node_modules/knex/lib/client.js:312:26) at runNextTicks (node:internal/process/task_queues:60:5) at listOnTimeout (node:internal/timers:538:9) at process.processTimers (node:internal/timers:512:7) at async Runner.ensureConnection (/app/node_modules/knex/lib/execution/runner.js:287:28) at async Runner.run (/app/node_modules/knex/lib/execution/runner.js:30:19) at async RedBeanNode.normalizeRaw (/app/node_modules/redbean-node/dist/redbean-node.js:572:22) at async RedBeanNode.getRow (/app/node_modules/redbean-node/dist/redbean-node.js:558:22) at async RedBeanNode.getCell (/app/node_modules/redbean-node/dist/redbean-node.js:593:19) at async Monitor.sendAvgPing (/app/server/model/monitor.js:1209:32) { sql: '\n' + ' SELECT AVG(ping)\n' + ' FROM heartbeat\n' + " WHERE time > DATETIME('now', ? || ' hours')\n" + ' AND ping IS NOT NULL\n' + ' AND monitor_id = ? limit ?', bindings: [ -24, 99, 1 ] } ``` I see that the db file is large — and so is the WAL file: ``` 1.3G -rwxr-xr-x 1 root root 1.3G Apr 30 01:51 kuma.db 32K -rwxr-xr-x 1 root root 32K Apr 30 01:55 kuma.db-shm 1.3G -rwxr-xr-x 1 root root 1.3G Apr 30 01:55 kuma.db-wal ``` `heartbeat` is the only large table: ``` sqlite> select count(*) from api_key; 0 sqlite> select count(*) from docker_host; 0 sqlite> select count(*) from 'group'; 3 sqlite> select count(*) from heartbeat; 8927986 sqlite> select count(*) from incident; 0 sqlite> select count(*) from maintenance; 0 sqlite> select count(*) from maintenance_status_page; 0 sqlite> select count(*) from monitor; 85 sqlite> select count(*) from monitor_group; 11 sqlite> select count(*) from monitor_maintenance; 0 sqlite> select count(*) from monitor_notification; 88 sqlite> select count(*) from monitor_tag; 0 sqlite> select count(*) from monitor_tls_info; 97 sqlite> select count(*) from notification; 2 sqlite> select count(*) from notification_sent_history; 0 sqlite> select count(*) from proxy; 0 sqlite> select count(*) from setting; 11 sqlite> select count(*) from status_page; 1 sqlite> select count(*) from status_page_cname; 0 sqlite> select count(*) from tag; 0 sqlite> select count(*) from user; 1 ``` `PRAGMA quick_check;` returns `ok`: ``` # sqlite3 kuma.db SQLite version 3.27.2 2019-02-25 16:06:06 Enter ".help" for usage hints. sqlite> pragma quick_check; ok ```
Author
Owner

@michaellenaghan commented on GitHub (Apr 30, 2025):

I think this is related to #2781

@michaellenaghan commented on GitHub (Apr 30, 2025): I think this is related to #2781
Author
Owner

@michaellenaghan commented on GitHub (Apr 30, 2025):

It's working again. I left a comment in #2781.

@michaellenaghan commented on GitHub (Apr 30, 2025): It's working again. I left a comment in #2781.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/uptime-kuma#4112
No description provided.