LogPager: Add IGNORE INDEX to avoid MariaDB optimizer bug
authorBrad Jorsch <bjorsch@wikimedia.org>
Fri, 20 Sep 2019 19:38:52 +0000 (15:38 -0400)
committerMobrovac <mobrovac@wikimedia.org>
Tue, 24 Sep 2019 13:58:22 +0000 (13:58 +0000)
This is basically the same thing we fixed for ApiQueryLogEvents in
I16dba2158.

Bug: T223151
Change-Id: I53a7ed59de3eed2b0b4f1b1fb7f6d302b1de276c

includes/logging/LogPager.php

index 781df06..0b78a36 100644 (file)
@@ -361,6 +361,11 @@ class LogPager extends ReverseChronologicalPager {
                if ( !$this->mTagFilter && !array_key_exists( 'ls_field', $this->mConds ) ) {
                        $options[] = 'STRAIGHT_JOIN';
                }
+               if ( $this->performer !== '' ) {
+                       // T223151: MariaDB's optimizer, at least 10.1, likes to choose a wildly bad plan for
+                       // some reason for this code path. Tell it not to use the wrong index it wants to pick.
+                       $options['IGNORE INDEX'] = [ 'logging' => [ 'times' ] ];
+               }
 
                $info = [
                        'tables' => $tables,