Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Database checks: `Select_full_join` warning is caused by the setup checks' own schema introspection

Đang mở
#1,245 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@Phillipxh đang làm issue này rồi.

Từ ngày 30/10/2026.

  • #1255 của @Phillipxh — đang mở

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
45/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
javascript, mariadb, php

Hướng nghiên cứu

Start by tracing the four named core setup checks and their SchemaWrapper construction, then inspect how serverinfo evaluates the Select_full_join threshold. Reproduce the reported increase by opening Administration → Overview against MariaDB with the described slow query filter. Done means Overview visits no longer cause this database check to fail; the issue lists downgrading the counter to a notice or excluding setup checks as possible approaches.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Setup
  • Nextcloud 35.0.2, serverinfo 7.0.0
  • MariaDB 11.8.9 (Alpine package), local socket, same host
  • PHP 8.5, nginx
  • occ db:add-missing-indices, missing columns and missing primary keys all report nothing
Bug description

Overview reports "Joins without indexes" (Select_full_join) as a failing warning: 0.1378% of queries did a full join without an index (96 full joins out of 71,025 queries over 33 h; the threshold is 0.05%).

To find the queries, I set this for one hour:

SET GLOBAL log_slow_filter = 'full_join', long_query_time = 0, log_slow_verbosity = 'query_plan,explain';

Results:

  • Select_full_join went from 96 to 108, so there were 12 full joins in the hour.
  • All 12 came from one database connection within one second (10:09:00–10:09:01).
  • That second matches a single GET /index.php/settings/admin in the web server log, i.e. opening Administration → Overview.
  • The 12 are Doctrine schema introspection queries against information_schema: 3 different queries, each run 4 times:
    • TABLES joined with COLLATION_CHARACTER_SET_APPLICABILITY
    • COLUMNS joined with TABLES, with a CHECK_CONSTRAINTS subquery
    • KEY_COLUMN_USAGE joined with REFERENTIAL_CONSTRAINTS
  • The 4 runs come from the core setup checks DatabaseHasMissingColumns, DatabaseHasMissingIndices, DatabaseHasMissingPrimaryKeys and DatabasePendingBigIntConversions. Each one creates new SchemaWrapper($connection), which introspects the whole schema.

information_schema tables have no indexes, so these joins are always counted as full joins. The query plans:

PRIMARY  t     ALL  NULL  TABLE_SCHEMA  ...  138   Using where; Open_frm_only; Scanned 1 database; Using temporary; Using filesort
PRIMARY  c     ALL  NULL  TABLE_SCHEMA  ...  946   Using where; Open_frm_only; Scanned 1 database; Using join buffer (flat, BNL join)
SIMPLE   ccsa  ALL  NULL  NULL          ...  1288  Using where; Using join buffer (flat, BNL join)
SIMPLE   k     ALL  NULL  TABLE_SCHEMA  ...  315   Using where; Open_full_table; Scanned 1 database; Using temporary; Using filesort
SIMPLE   c     ALL  NULL  CONSTRAINT_SCHEMA ... 11 Using where; Open_full_table; Scanned 1 database; Using join buffer (flat, BNL join)

So every Overview visit adds 12 to Select_full_join. The 96 since the last MariaDB restart is a multiple of 12 (consistent with 8 visits). On a small instance with little query volume, a handful of visits is enough to cross 0.05%. The check fails because the admin looked at it.

Following the recommendation (find the queries, add indexes) leads nowhere: the "missing indexes" are on MariaDB's catalogue tables. Also, on MariaDB log_queries_not_using_indexes (from the recommendation) logs far more than full joins. log_slow_filter = 'full_join' with long_query_time = 0 is what isolates them.

Expected behavior

Viewing the Overview page shouldn't make a database check fail.

Suggestions
  • Downgrade Select_full_join to a notice, as #1167 did for Join_without_index_rate. It's the same kind of counter, and an admin can't act on it.
  • Or take a baseline of Select_full_join before the schema checks run and leave their contribution out.

The same introspection also adds 12 on-disk temp tables per Overview visit, which feeds Created_tmp_disk_tables; that's covered in #1224.

Related: #1155, #1166, #1167, #1224, #1231

Ngôn ngữ chính
JavaScript
Star
133
Fork
67
Merge trung bình
22 giờ 55 phút
Pull request đã merge (30 ngày)
53

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của nextcloud/serverinfo

Tất cả issue của nextcloud/serverinfo

Issue tương tự

Thêm issue về JavaScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.