Page MenuHomePhabricator

Slow query in Special:BlockList with new block schema
Closed, ResolvedPublicPRODUCTION ERROR

Description

SELECT  
	bt_address,bt_user_text,bt_user,bt_auto,bt_range_start,bt_range_end,bl_id,
	block_by_actor.actor_user AS `bl_by`,
	block_by_actor.actor_name AS `bl_by_text`,
	bl_timestamp,bl_anon_only,bl_create_account,bl_enable_autoblock,bl_expiry,bl_deleted,
	bl_block_email,bl_allow_usertalk,bl_sitewide,
	comment_bl_reason.comment_text AS `bl_reason_text`,
	comment_bl_reason.comment_data AS `bl_reason_data`,
	comment_bl_reason.comment_id AS `bl_reason_cid`,
	(SELECT  1  FROM `block_target` `hu_block_target` 
		JOIN `block` `hu_block` ON ((hu_block.bl_target=hu_block_target.bt_id))   
		WHERE (hu_block_target.bt_user=block_target.bt_user) AND hu_block.bl_deleted = 1  
	) IS NOT NULL AS `hu_deleted`  
FROM `block` 
	JOIN `actor` `block_by_actor` ON ((actor_id=bl_by_actor)) 
	JOIN `block_target` ON ((bt_id=bl_target)) 
	JOIN `comment` `comment_bl_reason` ON ((comment_bl_reason.comment_id = bl_reason_id))   
WHERE (bt_user IS NOT NULL OR bt_range_start IS NOT NULL) 
	AND bt_range_start IS NULL 
	AND (bl_expiry > '20240325020054') 
	AND bl_deleted = 0  
ORDER BY bl_timestamp DESC,bl_id DESC 
LIMIT 101

Explain:

+------+--------------------+-------------------+--------+--------------------------+-----------+---------+------------------------------+--------+----------------------------------------------+
| id   | select_type        | table             | type   | possible_keys            | key       | key_len | ref                          | rows   | Extra                                        |
+------+--------------------+-------------------+--------+--------------------------+-----------+---------+------------------------------+--------+----------------------------------------------+
|    1 | PRIMARY            | block_target      | ref    | PRIMARY,bt_range,bt_user | bt_range  | 38      | const                        | 809912 | Using where; Using temporary; Using filesort |
|    1 | PRIMARY            | block             | ref    | bl_target,bl_expiry      | bl_target | 4       | enwiki.block_target.bt_id    | 1      | Using where                                  |
|    1 | PRIMARY            | block_by_actor    | eq_ref | PRIMARY                  | PRIMARY   | 8       | enwiki.block.bl_by_actor     | 1      |                                              |
|    1 | PRIMARY            | comment_bl_reason | eq_ref | PRIMARY                  | PRIMARY   | 8       | enwiki.block.bl_reason_id    | 1      |                                              |
|    2 | DEPENDENT SUBQUERY | hu_block_target   | ref    | PRIMARY,bt_user          | bt_user   | 5       | enwiki.block_target.bt_user  | 1      | Using index                                  |
|    2 | DEPENDENT SUBQUERY | hu_block          | ref    | bl_target                | bl_target | 4       | enwiki.hu_block_target.bt_id | 1      | Using where                                  |
+------+--------------------+-------------------+--------+--------------------------+-----------+---------+------------------------------+--------+----------------------------------------------+

Wrong table order, it should sort on bl_timestamp. Partially conflicting range conditions seem to confuse the planner.

Error
normalized_message
Expectation (readQueryTime <= 5) by MediaWiki\Actions\ActionEntryPoint::execute not met (actual: {actualSeconds}) in trx #{trxId}:
{query}
exception.trace
from /srv/mediawiki/php-1.42.0-wmf.23/includes/libs/rdbms/TransactionProfiler.php(525)
#0 /srv/mediawiki/php-1.42.0-wmf.23/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.23/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.23/includes/libs/rdbms/database/Database.php(828): Wikimedia\Rdbms\TransactionManager->recordQueryCompletion(Wikimedia\Rdbms\GeneralizedSql, double, boolean, integer, string)
#3 /srv/mediawiki/php-1.42.0-wmf.23/includes/libs/rdbms/database/Database.php(716): Wikimedia\Rdbms\Database->attemptQuery(Wikimedia\Rdbms\Query, string, boolean)
#4 /srv/mediawiki/php-1.42.0-wmf.23/includes/libs/rdbms/database/Database.php(643): Wikimedia\Rdbms\Database->executeQuery(Wikimedia\Rdbms\Query, string, integer)
#5 /srv/mediawiki/php-1.42.0-wmf.23/includes/libs/rdbms/database/Database.php(1350): Wikimedia\Rdbms\Database->query(Wikimedia\Rdbms\Query, string)
#6 /srv/mediawiki/php-1.42.0-wmf.23/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.23/includes/libs/rdbms/database/DBConnRef.php(351): Wikimedia\Rdbms\DBConnRef->__call(string, array)
#8 /srv/mediawiki/php-1.42.0-wmf.23/includes/pager/IndexPager.php(467): Wikimedia\Rdbms\DBConnRef->select(array, array, array, string, array, array)
#9 /srv/mediawiki/php-1.42.0-wmf.23/includes/pager/IndexPager.php(289): MediaWiki\Pager\IndexPager->reallyDoQuery(string, integer, boolean)
#10 /srv/mediawiki/php-1.42.0-wmf.23/includes/pager/IndexPager.php(739): MediaWiki\Pager\IndexPager->doQuery()
#11 /srv/mediawiki/php-1.42.0-wmf.23/includes/specials/SpecialBlockList.php(320): MediaWiki\Pager\IndexPager->getNumRows()
#12 /srv/mediawiki/php-1.42.0-wmf.23/includes/specials/SpecialBlockList.php(176): MediaWiki\Specials\SpecialBlockList->showList(MediaWiki\Pager\BlockListPager)
#13 /srv/mediawiki/php-1.42.0-wmf.23/includes/specialpage/SpecialPage.php(720): MediaWiki\Specials\SpecialBlockList->execute(string)
#14 /srv/mediawiki/php-1.42.0-wmf.23/includes/specialpage/SpecialPageFactory.php(1651): MediaWiki\SpecialPage\SpecialPage->run(NULL)
#15 /srv/mediawiki/php-1.42.0-wmf.23/includes/actions/ActionEntryPoint.php(504): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, MediaWiki\Context\RequestContext)
#16 /srv/mediawiki/php-1.42.0-wmf.23/includes/actions/ActionEntryPoint.php(145): MediaWiki\Actions\ActionEntryPoint->performRequest()
#17 /srv/mediawiki/php-1.42.0-wmf.23/includes/MediaWikiEntryPoint.php(199): MediaWiki\Actions\ActionEntryPoint->execute()
#18 /srv/mediawiki/php-1.42.0-wmf.23/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#19 /srv/mediawiki/w/index.php(3): require(string)
#20 {main}
Impact
Notes

Details

Request URL
https://en.wikipedia.org/wiki/Special:BlockList?blockType=*&limit=*&wpFormIdentifier=*&wpOptions%5B%5D=*&wpTarget=*

Event Timeline

This is Special:BlockList with the "Hide single IP blocks" and "Hide range blocks" boxes both checked. In this case we only want user blocks. A simpler condition filtering for user blocks appears to solve the issue.

Change #1013729 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/core@master] Special:BlockList: apply simpler conditions when listing user blocks

https://gerrit.wikimedia.org/r/1013729

Change #1013729 merged by jenkins-bot:

[mediawiki/core@master] Special:BlockList: apply simpler conditions when listing user blocks

https://gerrit.wikimedia.org/r/1013729

Change #1014075 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/core@wmf/1.42.0-wmf.23] Special:BlockList: apply simpler conditions when listing user blocks

https://gerrit.wikimedia.org/r/1014075

Change #1014075 merged by jenkins-bot:

[mediawiki/core@wmf/1.42.0-wmf.23] Special:BlockList: apply simpler conditions when listing user blocks

https://gerrit.wikimedia.org/r/1014075

Mentioned in SAL (#wikimedia-operations) [2024-03-25T22:22:15Z] <tstarling@deploy1002> Started scap: Backport for [[gerrit:1014075|Special:BlockList: apply simpler conditions when listing user blocks (T360864)]]

Mentioned in SAL (#wikimedia-operations) [2024-03-25T22:24:41Z] <tstarling@deploy1002> tstarling: Backport for [[gerrit:1014075|Special:BlockList: apply simpler conditions when listing user blocks (T360864)]] synced to the testservers (https://wikitech.wikimedia.org/wiki/Mwdebug)

Mentioned in SAL (#wikimedia-operations) [2024-03-25T22:36:53Z] <tstarling@deploy1002> Finished scap: Backport for [[gerrit:1014075|Special:BlockList: apply simpler conditions when listing user blocks (T360864)]] (duration: 14m 38s)