MediaWiki  master
LoadMonitorMySQL.php
Go to the documentation of this file.
1 <?php
22 namespace Wikimedia\Rdbms;
23 
24 use BagOStuff;
25 use WANObjectCache;
26 
35  private $warmCacheRatio;
36 
37  public function __construct(
38  ILoadBalancer $lb, BagOStuff $srvCache, WANObjectCache $wCache, array $options = []
39  ) {
40  parent::__construct( $lb, $srvCache, $wCache, $options );
41 
42  $this->warmCacheRatio = $options['warmCacheRatio'] ?? 0.0;
43  }
44 
45  protected function getWeightScale( $index, IDatabase $conn = null ) {
46  if ( $conn === null ) {
47  return parent::getWeightScale( $index, $conn );
48  }
49 
50  $weight = 1.0;
51  if ( $this->warmCacheRatio > 0 ) {
52  $res = $conn->query( 'SHOW STATUS', __METHOD__ );
53  $s = $res ? $conn->fetchObject( $res ) : false;
54  if ( $s === false ) {
55  $host = $this->lb->getServerName( $index );
56  $this->replLogger->error( __METHOD__ . ": could not get status for $host" );
57  } else {
58  // https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html
59  if ( $s->Innodb_buffer_pool_pages_total > 0 ) {
60  $ratio = $s->Innodb_buffer_pool_pages_data / $s->Innodb_buffer_pool_pages_total;
61  } else {
62  $ratio = 1.0;
63  }
64  // Stop caring once $ratio >= $this->warmCacheRatio
65  $weight *= min( $ratio / $this->warmCacheRatio, 1.0 );
66  }
67  }
68 
69  return $weight;
70  }
71 }
float $warmCacheRatio
What buffer pool use ratio counts as "warm" (e.g.
Basic MySQL load monitor with no external dependencies Uses memcached to cache the replication lag fo...
Basic DB load monitor with no external dependencies Uses memcached to cache the replication lag for a...
Definition: LoadMonitor.php:36
__construct(ILoadBalancer $lb, BagOStuff $srvCache, WANObjectCache $wCache, array $options=[])
Construct a new LoadMonitor with a given LoadBalancer parent.
Database cluster connection, tracking, load balancing, and transaction manager interface.
Basic database interface for live and lazy-loaded relation database handles.
Definition: IDatabase.php:38
getWeightScale( $index, IDatabase $conn=null)