Since yesterday, this cause are multi-second (up to 160 seconds) queries like this:
SELECT /* ApiQueryRecentChanges::run <user> */ rc_id, rc_timestamp, rc_namespace, rc_title, rc_cur_id, rc_type, rc_deleted, rc_this_oldid, rc_last_oldid, rc_user, rc_user_text, ts_tags, page_is_redirect FROM `recentchanges` FORCE INDEX (rc_timestamp) LEFT JOIN `tag_summary` ON ((rc_id=ts_rc_id)) LEFT JOIN `page` ON ((rc_namespace=page_namespace) AND (rc_title=page_title)) WHERE rc_namespace = '0' AND rc_type = '1' AND (rc_patrolled = 0) AND (page_is_redirect = 0 OR page_is_redirect IS NULL) ORDER BY rc_timestamp DESC, rc_id DESC LIMIT 51 /* 4d1857ea652abc7849668dc00f8055bb db1060 zhwiki 2s */
Either something has changed on the code generating them, or a js user script has changed, executing them in thousands.