Queries to the cu_log_event table on large wikis are taking too long and cause TransactionProfiler warnings. Based on experimentation on running the affected queries, I've found that this is due to the JOIN to the logging table.
I've found two solutions to this problem:
- Split the queries into two separate queries
- Update the JOIN conditions to use the cule_actor column instead of the log_actor column
Steps to reproduce
- Open Special:CheckUser on a wiki with many log actions (i.e. a large logging table)
- Run a check on a user which has made at least a few log actions.
Logstash details
Expectation (readQueryTime <= 5) by MediaWiki::main not met (actual: {actualSeconds}) in trx #{trxId}:
{query}from /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/TransactionProfiler.php(525)
#0 /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/TransactionProfiler.php(334): Wikimedia\Rdbms\TransactionProfiler->reportExpectationViolated(string, Wikimedia\Rdbms\GeneralizedSql, double, string, string)
#1 /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/database/TransactionManager.php(615): Wikimedia\Rdbms\TransactionProfiler->recordQueryCompletion(Wikimedia\Rdbms\GeneralizedSql, double, boolean, integer, string, string)
#2 /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/database/Database.php(825): Wikimedia\Rdbms\TransactionManager->recordQueryCompletion(Wikimedia\Rdbms\GeneralizedSql, double, boolean, integer, string)
#3 /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/database/Database.php(713): Wikimedia\Rdbms\Database->attemptQuery(Wikimedia\Rdbms\Query, string, boolean)
#4 /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/database/Database.php(640): Wikimedia\Rdbms\Database->executeQuery(Wikimedia\Rdbms\Query, string, integer)
#5 /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/database/Database.php(1347): Wikimedia\Rdbms\Database->query(Wikimedia\Rdbms\Query, string)
#6 /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/database/DBConnRef.php(119): Wikimedia\Rdbms\Database->select(array, array, array, string, array, array)
#7 /srv/mediawiki/php-1.42.0-wmf.12/includes/libs/rdbms/database/DBConnRef.php(351): Wikimedia\Rdbms\DBConnRef->__call(string, array)
#8 /srv/mediawiki/php-1.42.0-wmf.12/extensions/CheckUser/src/CheckUser/Pagers/AbstractCheckUserPager.php(770): Wikimedia\Rdbms\DBConnRef->select(array, array, array, string, array, array)
#9 /srv/mediawiki/php-1.42.0-wmf.12/includes/pager/IndexPager.php(289): MediaWiki\CheckUser\CheckUser\Pagers\AbstractCheckUserPager->reallyDoQuery(string, integer, boolean)
#10 /srv/mediawiki/php-1.42.0-wmf.12/includes/pager/IndexPager.php(571): MediaWiki\Pager\IndexPager->doQuery()
#11 /srv/mediawiki/php-1.42.0-wmf.12/extensions/CheckUser/src/CheckUser/SpecialCheckUser.php(378): MediaWiki\Pager\IndexPager->getBody()
#12 /srv/mediawiki/php-1.42.0-wmf.12/includes/specialpage/SpecialPage.php(727): MediaWiki\CheckUser\CheckUser\SpecialCheckUser->execute(NULL)
#13 /srv/mediawiki/php-1.42.0-wmf.12/includes/specialpage/SpecialPageFactory.php(1652): MediaWiki\SpecialPage\SpecialPage->run(NULL)
#14 /srv/mediawiki/php-1.42.0-wmf.12/includes/MediaWiki.php(359): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext)
#15 /srv/mediawiki/php-1.42.0-wmf.12/includes/MediaWiki.php(954): MediaWiki->performRequest()
#16 /srv/mediawiki/php-1.42.0-wmf.12/includes/MediaWiki.php(607): MediaWiki->main()
#17 /srv/mediawiki/php-1.42.0-wmf.12/index.php(50): MediaWiki->run()
#18 /srv/mediawiki/php-1.42.0-wmf.12/index.php(46): wfIndexMain()
#19 /srv/mediawiki/w/index.php(3): require(string)
#20 {main}