This is very similiar to Bug 59987 and may need a similar fix.
ApiQueryContributions::execute calls Revision::getParentLengths thus:
$this->parentLens = Revision::getParentLengths( $this->getDB(), $revIds );
The DB handle returned by getDB() is initialized previously to use the 'contributions' name for the database load balancer. This is appropriate for ApiQueryContributions itself but less-so for Revision::getParentLengths as the latter query is quite different and limits the optimization options in the back end.
Consider passing a second normal slave connection instead.