As I mentioned at T202715#4865835 , I believe our main cause of contention at the moment is the following query:
User::loadFromDatabase Lock wait timeout exceeded; try restarting transaction SELECT user_id,user_name,user_real_name,user_email,user_touched,user_token,user_email_authenticated,user_email_token,user_email_token_expires,user_registration,user_editcount,user_actor.actor_id FROM `user` LEFT JOIN `actor` `user_actor` ON ((user_actor.actor_user = user_id)) WHERE user_id = '388680' LIMIT 1 FOR UPDATE
As detailed in T214963#4918834, this seems to be due to VisualEditor's find-and-replace dialog submitting concurrent requests to the API's action=options endpoint. We also note that the same dialog doesn't avoid submitting useless requests when the user is not logged in.
This seems to have been going on for some time; it has been confirmed in 1.33.0-wmf.3, and the ApiOptions part of T206098 may have been the same cause too.