fix for add from pool bug (long loading time) mantis 47724 - #11821
fix for add from pool bug (long loading time) mantis 47724#11821mglaubitz wants to merge 1 commit into
Conversation
… index
The 'Add from pool' question browser (ilObjTestGUI -> ilTestQuestionBrowserTableGUI
-> ilAssQuestionList::load) built one large query with 7 correlated EXISTS
subqueries (feedback x4, hints, taxonomies) as SELECT fields. These were
evaluated for every candidate row BEFORE ORDER BY/LIMIT, so on large
instances (bug report: ~199k rows) the query ran 30-40 min and blocked
other queries.
Fix: when a Range is set and neither a HAVING filter nor an ORDER BY on a
computed column (feedback/hints/taxonomies) is active, load in two phases:
Phase A: SELECT question_id + required JOINs/filters + GROUP BY +
ORDER BY + LIMIT (no EXISTS subqueries) -> small paginated id set
Phase B: full SELECT incl. feedback/hints/taxonomies EXISTS, restricted
to the paginated ids via IN (...) -> flags computed only for the
~800 visible rows instead of the full candidate set.
Fallback to the original single-phase query for: no range, HAVING filter
(feedback/hints = true|false), ORDER BY feedback/hints/taxonomies.
buildOrderQueryExpression now qualifies columns for phase A (qpl_questions.*
not selected -> ambiguous title) and backticks qualified names per segment
(`qpl_questions`.`title`).
Adds composite index i6 (obj_fi, original_id, title) on qpl_questions
via ilTestQuestionPool10DBUpdateSteps::step_3() to support the phase A
filter (obj_fi IN ... AND original_id IS NULL) + default title ordering.
Adds ilAssQuestionListTwoPhaseTest (15 tests) covering the two-phase path,
all fallback conditions, column qualification and SQL shape.
Verified with EXPLAIN against the local docker DB: phase A has no
DEPENDENT SUBQUERY (3 simple JOINs only), phase B's subqueries are
evaluated over rows=2 (paginated set) instead of the full candidate set.
|
Hi @mglaubitz Thank you for the PR. First one question:
What happens if you only add the first of the two changes (the index) provided in this PR: This index seems to be added to improve the existing query (and potentially the new one) as the corresponding fields seem to not show up elsewhere in your changes. It should already improve the situation somewhat. What was the improvement if only this change was applied (see)? Questions:
Change Requests:
This is just the first round, as far as I can see. I.e. function naming seems to be somewhat lacking, but the correct names will only become clear once we really have a final structure. Once this is done the code should have become more readable and logical, so that we can figure out, what else needs to be done. Best, |
we let one of our local AI models (GLM 5.2) analyse the problem and create a bug fix. this reduces loading time on ourt exam-test server from 3.6 minutes to 6.2 seconds (!)