A condition like rc_source != 'mw.edit' can't use an index on rc_source, whereas rc_source IN ('mw.new', 'mw.log', 'mw.categorize', 'wb') potentially can. We will need an extension attribute allowing extensions to register their rc_source values, so that inverted filters can be efficiently implemented.
Description
Details
| Status | Subtype | Assigned | Task | ||
|---|---|---|---|---|---|
| Resolved | None | T400696 FY25-26 WE1.4.1 RecentChanges database performance improvements | |||
| Resolved | tstarling | T403142 recentchanges.rc_source registry of known values | |||
| Resolved | tstarling | T404416 ChangesListQuery class and related ChangesListSpecialPage refactoring |
Event Timeline
Change #1183283 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/core@master] recentchanges: Allow registration of known rc_source values
Change #1183285 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/extensions/Wikibase@master] Register rc_source value
Change #1183288 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/extensions/Flow@master] Register rc_source value
Change #1183289 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/extensions/WikiLambda@master] Register rc_source value
Change #1184954 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/extensions/Wikistories@master] Register rc_source value
Change #1184959 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/core@master] recentchanges: Use the new extension attribute for active user queries
Change #1183283 merged by jenkins-bot:
[mediawiki/core@master] recentchanges: Allow registration of known rc_source values
Change #1183288 merged by jenkins-bot:
[mediawiki/extensions/Flow@master] Register rc_source value
Change #1183285 merged by jenkins-bot:
[mediawiki/extensions/Wikibase@master] Register rc_source value
Change #1184954 merged by jenkins-bot:
[mediawiki/extensions/Wikistories@master] Register rc_source value
Change #1183289 merged by jenkins-bot:
[mediawiki/extensions/WikiLambda@master] Register rc_source value
Change #1184959 merged by jenkins-bot:
[mediawiki/core@master] recentchanges: Use the new extension attribute for active user queries
Change #1186141 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/core@master] recentchanges: Simplify current-revision filters
Change #1186141 merged by jenkins-bot:
[mediawiki/core@master] recentchanges: Simplify current-revision filters
Change #1186678 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/core@master] recentchanges: Add ChangesListFilterGroupContainer
Change #1186924 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/extensions/ORES@master] Improve filter group tests
Change #1186924 merged by jenkins-bot:
[mediawiki/extensions/ORES@master] Improve filter group tests
Change #1191646 had a related patch set uploaded (by Tim Starling; author: Tim Starling):
[mediawiki/core@master] recentchanges: Add ChangesListQuery
Test wiki created on Patch demo by KGraessle-WMF using patch(es) linked to this task:
https://206382c5a9.catalyst.wmcloud.org/w/
Test wiki on Patch demo by KGraessle-WMF using patch(es) linked to this task was deleted:
Test wiki created on Patch demo by KGraessle-WMF using patch(es) linked to this task:
https://04607422ab.catalyst.wmcloud.org/w/
Test wiki on Patch demo by KGraessle-WMF using patch(es) linked to this task was deleted:
Test wiki created on Patch demo by KGraessle-WMF using patch(es) linked to this task:
https://0fbfb38dfc.catalyst.wmcloud.org/w/
Test wiki on Patch demo by KGraessle-WMF using patch(es) linked to this task was deleted:
Test wiki created on Patch demo by KGraessle-WMF using patch(es) linked to this task:
https://5f215c17d3.catalyst.wmcloud.org/w/
Change #1191646 merged by Scardenasmolinar:
[mediawiki/core@master] recentchanges: Add ChangesListQuery
This task does not have any pending changes to be merged, so I am moving it over to QA.
Test wiki on Patch demo by KGraessle-WMF using patch(es) linked to this task was deleted:
This is done. However, I could not reproduce any performance improvement. The database does actually optimise a not-equals condition, so the index usage doesn't change.
wikiadmin2023@10.192.16.46(commonswiki)> select count(*) from recentchanges where rc_source != 'mw.edit' AND rc_source != 'mw.log' AND rc_source != 'mw.categorize';
+----------+
| count(*) |
+----------+
| 161489 |
+----------+
1 row in set (0.170 sec)
wikiadmin2023@10.192.16.46(commonswiki)> select count(*) from recentchanges where rc_source IN ('mw.new', 'flow', 'wb');
+----------+
| count(*) |
+----------+
| 161488 |
+----------+
1 row in set (0.081 sec)I am not sure if your experiment (dis)proves anything. The ChangesList interface does not allow users to run queries like these. Also, such a simple query could have been optimized by using subtraction (SELECT COUNT(*) FROM recentchanges - SELECT COUNT(*) FROM recentchanges WHERE rc_source IN (...)).