[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/ -> runBatchedQuery.php (source)

   1  <?php
   2  /**
   3   * Run a database query in batches and wait for slaves. This is used on large
   4   * wikis to prevent replication lag from going through the roof when executing
   5   * large write queries.
   6   *
   7   * This program is free software; you can redistribute it and/or modify
   8   * it under the terms of the GNU General Public License as published by
   9   * the Free Software Foundation; either version 2 of the License, or
  10   * (at your option) any later version.
  11   *
  12   * This program is distributed in the hope that it will be useful,
  13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15   * GNU General Public License for more details.
  16   *
  17   * You should have received a copy of the GNU General Public License along
  18   * with this program; if not, write to the Free Software Foundation, Inc.,
  19   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  20   * http://www.gnu.org/copyleft/gpl.html
  21   *
  22   * @file
  23   * @ingroup Maintenance
  24   */
  25  
  26  require_once  __DIR__ . '/Maintenance.php';
  27  
  28  /**
  29   * Maintenance script to run a database query in batches and wait for slaves.
  30   *
  31   * @ingroup Maintenance
  32   */
  33  class BatchedQueryRunner extends Maintenance {
  34  	public function __construct() {
  35          parent::__construct();
  36          $this->mDescription =
  37              "Run a query repeatedly until it affects 0 rows, and wait for slaves in between.\n" .
  38                  "NOTE: You need to set a LIMIT clause yourself.";
  39      }
  40  
  41  	public function execute() {
  42          if ( !$this->hasArg() ) {
  43              $this->error( "No query specified. Specify the query as a command line parameter.", true );
  44          }
  45  
  46          $query = $this->getArg();
  47          $n = 1;
  48          $dbw = wfGetDB( DB_MASTER );
  49          do {
  50              $this->output( "Batch $n: " );
  51              $n++;
  52              $dbw->query( $query, __METHOD__ );
  53              $affected = $dbw->affectedRows();
  54              $this->output( "$affected rows\n" );
  55              wfWaitForSlaves();
  56          } while ( $affected > 0 );
  57      }
  58  
  59  	public function getDbType() {
  60          return Maintenance::DB_ADMIN;
  61      }
  62  }
  63  
  64  $maintClass = "BatchedQueryRunner";
  65  require_once RUN_MAINTENANCE_IF_MAIN;


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1