nextcloud / nextcloud/server

[Bug]: Missing column in database index on query for time sensitive background jobs

Open
#46,126 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

1. to develop 29-feedback bug good first issue performance 🚀
Dominant language
PHP
Stars
36.9k
Forks
5.2k
Avg merge
2d 3h
Merged PRs (30d)
713

Description

⚠️ This issue respects the following points: ⚠️
Bug description

The query 4f0fc707a2e82ec699067a969cd17b05

SELECT
  *
FROM
  `oc_jobs`
WHERE
  (`reserved_at` <= ?)
  AND (`last_checked` <= ?)
  AND (`time_sensitive` = ?)
ORDER BY
  `last_checked` ASC
LIMIT
  ?

does not use a covering index. The index job_lastcheck_reserved only covers last_checked and reserved_at, not time_sensitive. The database has to scan a bunch of rows every time cron picks the next job outside the maintenance window:

image

Steps to reproduce
  1. Install Nextcloud
  2. Configure a maintenance window
Expected behavior

An index on (last_checked, reserved_at, time_sensitive)

Installation method

None

Nextcloud Server version

29

Operating system

None

PHP engine version

None

Web server

None

Database engine version

None

Is this bug present after an update or on a fresh install?

None

Are you using the Nextcloud Server Encryption module?

None

What user-backends are you using?
  • Default user-backend (database)
  • LDAP/ Active Directory
  • SSO - SAML
  • Other
Configuration report

No response

List of activated Apps

No response

Nextcloud Signing status

No response

Nextcloud Logs

No response

Additional info

cc @nickvergessen

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue identifies the oc_jobs query and job_lastcheck_reserved index; start by locating the schema or migration that defines them and the cron path that selects time-sensitive jobs. Confirm the index covers time_sensitive and verify the query plan avoids the reported scan, with the project's database checks passing.

Written by the indexing model from the issue text.

Assessment

Tech stack
php, sql
Domain
databases
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.